我正在使用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/