对于以下代码:
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})]