NetworkX图中所有节点之间的边缘

3

我可以像下面这样在任意两个单独的节点之间添加边:

G.add_edge(node1, node)

但是,如果我想要在任意两个节点之间添加边(所有节点都应该相邻),当涉及大量节点时就会变得困难。

例如: 如果节点数为四个,它们分别是1、2、3、4。图形应该如下所示: enter image description here

对于上述图形,我按以下方式添加节点:

graph = [(1, 2),(1, 3),(1, 4), (2, 3),(2, 4), (3, 4)]
for edge in graph:
        G.add_edge(edge[0], edge[1])

在图构建中是否有默认选项作为我的需求参数?

基本上我需要为给定的节点构建一个团。

谢谢

1个回答

4

根据您的描述,我认为您正在尝试创建一个完整的图形。Networkx有一个内置的方法可以创建一个完整的图形。

import networkx as nx
G=nx.complete_graph(4)
G.edges()
>[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

如果你不想让节点被命名为0,1,2,3,那么你可以使用其他名称重新命名G中的节点。按照上面的命令执行以下操作:

nodenames = ['a', 'b', 'c', 'd']
mapping = {i:nodename for i,nodename in enumerate(nodenames)}
#now mapping looks like {0:'a', 1:'b', ...}
H=nx.relabel_nodes(G,mapping)
H.edges()
> [('a', 'c'), ('a', 'b'), ('a', 'd'), ('c', 'b'), ('c', 'd'), ('b', 'd')]

(注:我不喜欢使用字典推导式来定义mapping,如果有人能给我一个更直接的版本而不需要枚举,我将不胜感激。)


是的,它解决了我的问题,谢谢Joel。如果我们可以将节点作为参数传递而不是重新标记它们,那将非常有用。 - djkpA
@djkpA 参考这个答案 - Lerner Zhang
我会很感激如果有人能给我一个更直接的版本,而不需要列举。仍然使用enumerate(),但不使用推导式:dict(enumerate(nodenames)) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接