如何获取两个节点之间的边缘数据?

16

我想获取networkx图中两个节点之间的边缘。 更具体地说,我想获取与此边缘相关联的一些数据。 我事先知道这两个节点是链接的。 有没有函数可以做到这一点?


你具体是指什么?是在两个你知道已连接的特定节点之间绘制边缘,还是搜索具有边缘的节点,然后根据这些节点拥有的其他属性计算某些东西? - Reti43
@Reti43 我的意思是,给定两个节点 uv,获取连接它们的边。 - a06e
类似 get_edge_data() 的东西?还有 edges(),但它返回连接的节点列表。 - Reti43
1个回答

20

边缘数据存储在字典中。要访问该字典,请使用get_edge_data()

import networkx as nx
G=nx.Graph()
G.add_edge(1,2, weight=5)
G.get_edge_data(1,2)
> {'weight': 5}

如果您想遍历所有的边缘,可以使用G.edges(data=True)

H = nx.Graph()
H.add_edge(2, 3, color = 'red')
H.add_edge(1, 2, weight = 4)
for u,v,data in H.edges(data=True):
    print(u, v, data)
> 1 2 {'weight': 4}
> 2 3 {'color': 'red'}

所以我尝试了一下使用一个有多个边连接两个节点A和B的图。其中一条边的权重为40,第二条边的值为50,第三条边的值为60。使用nx.get_edge_data只会返回最后一条边(值为60)。是否有一个命令可以返回所有的权重? - spacedustpi
3
当我对一个有两条边连接1和2的MultiGraph使用G.get_edge_data(1,2)时,它会返回两条边及其权重。如果你的体验不同,你应该发表一个新的问题。[你确定这个图有多条边吗? - 如果它不是一个MultiGraphMultiDiGraph,那么每次添加边缘时都会覆盖之前的边缘] - Joel
谢谢,我在发布问题几个小时后终于发现了Mulitgraph。 - spacedustpi
对于任何想知道的人,如果你使用nx.Graph()并从1到2添加一条边。你也可以说nx.get_edge_data(2,1)。这将接收相同的边。 - Gertjan Brouwer
@Gertjan Brouwer 我相信你的意思是 G.get_edge_data(2,1)。 - Mehmet Burak Sayıcı

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接