当我指定了多条边,而不仅仅是一条特定的边时,如何为边添加权重?Networkx



对于以下代码:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
#Set 1
G.add_edges_from([('A','B'),('A','C'),('C','B')])
#Set 2
G.add_edges_from([('D','A'),('D','B'),('D','C')])
#Set 3
G.add_edges_from([('E','D'),('E','B'),('E','C')])
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos, node_size=500, node_color = 'green')
nx.draw_networkx_edges(G,pos, edgelist = G.edges())
plt.show()

我想给边增加权重。据我所知,所有边的权重仅为1。我想修改图中每条边的权重。

从以下文档中,我看到您可以通过添加来更改单个节点的权重:https://networkx.org/documentation/stable/reference/generated/networkx.linalg.attrmatrix.attr_sparse_matrix.html

我想给每条边添加不同的权重。例如,('A','B'(是0.1重量,('A'','C'(是0.2重量,等等。

我还看了以下帖子:NetworkX:如何将权重添加到现有的G.边缘((?

然而,看起来他们正在对所有边的每个边进行迭代,以获得特定的权重,这不是我想要的,而是我想要特定边的特定权重。

添加边时,可以指定一个包含任意边属性的字典:

from networkx import DiGraph
G = DiGraph()
G.add_edges_from([('A','B', {'weight': 0.1}),('A','C', {'weight': 0.2})])
print(G.edges(data=True))
# [('A', 'B', {'weight': 0.1}), ('A', 'C', {'weight': 0.2})]

或者,可以指定一个三元组,其中前两个元素是源/目的地,第三个元素是权重,然后使用.add_weighted_edges_from方法:

from networkx import DiGraph
G = DiGraph()
G.add_weighted_edges_from([('A','B', 0.1),('A','C', 0.2)])
print(G.edges(data=True))
# [('A', 'B', {'weight': 0.1}), ('A', 'C', {'weight': 0.2})]

最新更新