python - 如何比较 Networkx 中的有向图?

标签 python graph networkx

我有两个具有相同节点数和边数的有向 Networkx 图。

enter image description here 如何在 Networkx 中比较这两个不同图的结构?节点名称无关紧要。我尝试使用 Information about graph structure 中的 Networkx DiGraph.order()DiGraph.degree() 等但我的图表的所有参数都相等。

以及通常如何比较 2 个以上图的结构并仅找到具有独特结构的图。 Networkx 有专门的功能吗?

最佳答案

要确定两个图是否同构,您可以使用函数 is_isomorphic()。不幸的是,没有比较 2 个以上图表的功能。但是您可以比较所有可能的图组合,并根据同构的组合构建图 iso_graph。要查找所有同构图组,您可以使用函数 connected_components()find_cliques()iso_graph:

import networkx as nx
from itertools import combinations

G1 = nx.path_graph(4)
G2 = nx.path_graph(4)
G3 = nx.path_graph(4)
G4 = nx.path_graph(5)
G5 = nx.path_graph(5)
G6 = nx.path_graph(5)

graphs = {G1: 'G1', G2: 'G2', G3: 'G3', G4: 'G4', G5: 'G5', G6: 'G6'}
iso_pairs = {(graphs[g1], graphs[g2]) for g1, g2 in combinations(graphs, 2) if nx.is_isomorphic(g1, g2)}
# {('G1', 'G3'), ('G5', 'G6'), ('G4', 'G6'), ('G1', 'G2'), ('G4', 'G5'), ('G2', 'G3')}

iso_graph = nx.from_edgelist(iso_pairs) 
for c in nx.connected_components(iso_graph):
    print(c)
# {'G1', 'G3', 'G2'}
# {'G5', 'G6', 'G4'}

%matplotlib inline # jupyter notebook
nx.draw(iso_graph, with_labels=True)

iso_graph

关于python - 如何比较 Networkx 中的有向图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975773/

相关文章:

python - Pandas:删除数据框中的重复行

wpf - WPF 能否在性能敏感的环境中渲染包含 300,000 个点的线条路径?

python - NetworkX - 如何写入 csv 多重中心性指标

python - 在 Python 中对列表进行分类

python - CV2改变图像

python - sess.run() 导致训练缓慢

java - JavaFX 中的三次方程图。

graph - 如何调整 APEX 中图形/图表的范围?

python - 手动绘制图表并导入 NetworkX

graph - 如何将Redisgraph转换为networkx图以在Node2vec算法中使用?