我需要从networkx生成一个完全连接的子图,从我想要连接的节点列表开始.基本上,我希望传递给函数的列表中的所有节点都相互连接.
我想知道是否有任何内置函数来实现这一点(我还没有找到)?或者我应该考虑一些算法?
非常感谢你.
zub*_*hta 13
我不知道有任何方法可以做到这一点,但你可以很容易地模仿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()
Run Code Online (Sandbox Code Playgroud)
Mae*_*ler 11
有一个功能可以创建完全连接(即完整)的图形,nameley complete_graph
.
import networkx as nx
g = nx.complete_graph(10)
Run Code Online (Sandbox Code Playgroud)
它需要一个整数参数(图中的节点数),因此您无法控制节点标签.我没有找到自动执行此操作的功能,但使用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)
Run Code Online (Sandbox Code Playgroud)
combinations(nodes, 2)
将创建具有所有对组合的2元素元组nodes
,然后它们将作为图形中的边缘.
但是,此解决方案仅适用于无向图.看看zubinmehta的解决方案,以获得更通用的方法.
您可以使用 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.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7826 次 |
最近记录: |