NetworkX 中的节点与边

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NetworkX 中的节点与边相关的知识,希望对你有一定的参考价值。

参考技术A 究竟是什么对象可以作为 NetworkX 中的节点与边,NetworkX 并没有做限定。节点与边可以是您定义的任何可支持的有意义的对象。普遍的选择是数字、字符串,除了节点可以是任何可哈希的 Python 对象( None 除外),而边可以使用 G.add_edge(n1, n2, object=x) 创建联系的任何对象 x 。

更多详细内容见我的博文: NetworkX | NetworkX 使用(二) | NetworkX 使用(三) 。

可以为边添加新的属性:

更多方法见:

显示为: 'day': 'Friday' 。

当然也可以继续添加或者修改属性:

同样也可以为节点添加属性:

如何使用 python 的 networkx 模块从节点列表生成完全连接的子图

【中文标题】如何使用 python 的 networkx 模块从节点列表生成完全连接的子图【英文标题】:How to generate a fully connected subgraph from node list using python's networkx module 【发布时间】:2012-05-25 20:29:00 【问题描述】:

我需要用networkx 生成一个完全连接的子图,从我要连接的节点列表开始。基本上,我希望传递给函数的列表中的所有节点都相互连接。

我想知道是否有任何内置函数可以实现这一点(我还没有找到)? 还是我应该想一些算法?

非常感谢。

【问题讨论】:

【参考方案1】:

我不知道有什么方法可以做到这一点,但是您可以轻松地模仿 networkx 的 complete_graph() 方法并稍微改变它(几乎就像一个内置函数):

import networkx
import itertools

def complete_graph_from_list(L, create_using=None):
    G = networkx.empty_graph(len(L),create_using)
    if len(L)>1:
        if G.is_directed():
            edges = itertools.permutations(L,2)
        else:
            edges = itertools.combinations(L,2)
        G.add_edges_from(edges)
    return G

S = complete_graph_from_list(["a", "b", "c", "d"])
print S.edges()

【讨论】:

谢谢,是的,我应该寻找这些排列/组合函数 :) 当我用 len(L)>1 替换 n>1 时,这对我有用 有使用nx.complete_graphnx.relabel_nodes 的直接方法。看我的回答。【参考方案2】:

有一个用于创建全连接(即完整)图的函数,nameley complete_graph

import networkx as nx
g = nx.complete_graph(10)

它需要一个整数参数(图中的节点数),因此您无法控制节点标签。我还没有找到自动执行此操作的功能,但使用itertools 很容易:

from itertools import combinations

nodes = ['A', 'B', 'C', 'D', 'E']
edges = combinations(nodes, 2)
g = nx.Graph()
g.add_nodes_from(nodes)
g.add_edges_from(edges)

combinations(nodes, 2) 将创建包含 nodes 的所有对组合的 2 元素元组,然后将其用作图中的边。

但是,此解决方案仅对无向图有效。查看zubinmehta's solution 了解更通用的方法。

【讨论】:

【参考方案3】:

您可以使用 networkx 命令直接生成具有整数节点的 clique,然后有一个简单的命令可以使用任何其他可散列名称重新标记节点。

import networkx as nx
L=["hello", "world", "how", "are", "you"]
G=nx.complete_graph(len(L))
nx.relabel_nodes(G,dict(enumerate(L)), copy = False) #if copy = True then it returns a copy.

【讨论】:

以上是关于NetworkX 中的节点与边的主要内容,如果未能解决你的问题,请参考以下文章

节点作为networkx中的格点

标记外部节点,与networkx中的其他节点/边缘重叠最小

NetworkX - 连接的列

Pygraphviz / networkx 设置节点级别或层

NetworkX节点属性绘制

使用默认为节点名称的节点标签绘制 networkx 图