我正在使用python流行的网络库networkx。从下面的代码中,我希望打印的语句是等效的。

import networkx as nx

graph = nx.Graph()
mgraph =  nx.MultiDiGraph()

for G in [graph, mgraph]:
    G.add_edge(1, 2, weight=4.7)

print(graph.get_edge_data(1, 2))
print(mgraph.get_edge_data(1,2))


但是我得到以下内容:

{'weight': 4.7}
{0: {'weight': 4.7}}


有谁知道为什么在多向图的情况下要添加额外的0键?它对应什么?

谢谢。

最佳答案

MultiDiGraph允许多个边。每个边缘可以具有其自己的属性。在您的示例中,告诉您的是,在Graph情况下,边缘(只能有一个)的权重为4.7。但是在MultiDiGraph情况下,它告诉您被0索引的边(恰好只有该单个边)的权重为4.7。

尝试这样做,使我们在再次添加边但权重不同的地方更加清晰:

import networkx as nx

graph = nx.Graph()
mgraph =  nx.MultiDiGraph()

for G in [graph, mgraph]:
    G.add_edge(1, 2, weight=4.7)
    G.add_edge(1, 2, weight = 5)  #are we overwriting an edge, or adding an extra edge?

print(graph.get_edge_data(1, 2))
print(mgraph.get_edge_data(1,2))


这给出了输出

>{'weight': 5}
>{0: {'weight': 4.7}, 1: {'weight': 5}}


表明在Graph情况下,edge属性被覆盖(因为只有一条边),但是在MultiDiGraph情况下,第二条边添加了索引1

关于python - Networkx:在MultiDiGraph上调用时,get_edge_data返回意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57927173/

10-12 21:59