python - Networkx:在 MultiDiGraph 上调用时,get_edge_data 返回意外结果
问题描述
我正在使用 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
在多向图的情况下要添加额外的键?它对应什么?
解决方案
AMultiDiGraph
允许多个边。每条边都可能有自己的属性。在您的示例中,它告诉您的是,在这种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
情况下,边缘属性被覆盖(因为只有一条边),但在这种MultiDiGraph
情况下,第二条边添加了 index 1
。
推荐阅读
- node.js - Aws-amplify 无效的 lambda 函数无效的 JSON 响应
- vba - 在命令按钮单击 MS Access VBA 代码时出现运行时错误 424
- ssh - 远程 SSH 在本地网络之外不起作用
- akka.net - Akka.net:我应该为 Lighthouse/Seed 节点指定“裂脑解析器”配置吗
- r - R:如何使用 gamboost 进行预测
- react-native - 如何使用 expo 包为 React native/expo 应用程序制作可重用组件包
- .net - Dropbox上传“不能同时传入空访问和刷新令牌”
- jquery - 在滚动时更改图像 src
- node.js - 在模式创建期间将字段定义为猫鼬中的索引时如何指定顺序?
- python - Python OSError:异常:运行外部插件时访问冲突读取0x0000000000000000