如何为NetworkX中批量添加的边设置不同权重?
为NetworkX图的每条边设置不同权重的解决方案
你可以通过两种实用方式实现为每条边指定不同权重的需求:
方法一:添加边时直接指定权重
add_edges_from方法支持传入包含权重属性的元组,格式为(源节点, 目标节点, {'weight': 权重值}),在添加边的同时就能完成权重设置。示例代码如下:
import networkx as nx import matplotlib.pyplot as plt G = nx.DiGraph() # Set 1:添加边时指定不同权重 G.add_edges_from([ ('A','B', {'weight': 0.1}), ('A','C', {'weight': 0.2}), ('C','B', {'weight': 0.3}) ]) # Set 2 G.add_edges_from([ ('D','A', {'weight': 0.4}), ('D','B', {'weight': 0.5}), ('D','C', {'weight': 0.6}) ]) # Set 3 G.add_edges_from([ ('E','D', {'weight': 0.7}), ('E','B', {'weight': 0.8}), ('E','C', {'weight': 0.9}) ]) # 验证权重是否设置成功 print(G.edges(data=True)) 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()
方法二:批量更新已添加边的权重
如果已经完成边的添加,可通过定义边-权重映射字典,批量为每条边赋值权重:
import networkx as nx import matplotlib.pyplot as plt G = nx.DiGraph() # 先添加所有边 G.add_edges_from([('A','B'),('A','C'),('C','B')]) G.add_edges_from([('D','A'),('D','B'),('D','C')]) G.add_edges_from([('E','D'),('E','B'),('E','C')]) # 定义每条边的权重字典 edge_weights = { ('A','B'): 0.1, ('A','C'): 0.2, ('C','B'): 0.3, ('D','A'): 0.4, ('D','B'): 0.5, ('D','C'): 0.6, ('E','D'): 0.7, ('E','B'): 0.8, ('E','C'): 0.9 } # 批量更新权重 for edge, weight in edge_weights.items(): G.edges[edge]['weight'] = weight # 验证权重 print(G.edges(data=True)) 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()
两种方法都能满足为每条边设置不同权重的需求,可根据实际场景选择使用。
内容的提问来源于stack exchange,提问作者PKrange
相关产品推荐
相关产品推荐

