如何在图形的边缘分配/附加权重?

时间:2016-03-15 20:34:59

标签: python algorithm graph-theory networkx

我想用一堆边来附加相同或不同的重量。但我在NetworkX中找不到任何此功能。如果Networkx中有功能,那么它是什么,如果没有,那么建议我如何在python中附加权重与边缘? 例如:如果我有一些边缘列表,没有边缘

edges=[(1,2),(1,4),(3,4),(4,2)]

然后我想在所有边缘附加相同的重量(1)。

预期输出为:weighted_edges=[(1,2,1),(1,4,1),(3,4,1),(4,2,1)]

2 个答案:

答案 0 :(得分:1)

请参阅networkx的tutorial

import networkx as nx
G = nx.Graph()
G.add_nodes_from([1, 2, 3, 4, 5])

G.add_edge(1, 2, weight=4.7 )
G.add_edges_from([(1,2), (2,3,{'weight':8})])
G[1][2]['weight'] = 4.7
G.edge[1][2]['weight'] = 4

在你的例子中

G.add_edges_from(edges, weight=1)

添加默认权重为1的所有边。

答案 1 :(得分:1)

最简单的版本是使用add_weighted_edges_from

import networkx as nx
G=nx.Graph()
G.add_weighted_edges_from([(1,2,1),(1,4,1),(3,4,1),(4,2,1)])
G.edges(data=True)  #print out the edges with weight
>[(1, 2, {'weight': 1}),
 (1, 4, {'weight': 1}),
 (2, 4, {'weight': 1}),
 (3, 4, {'weight': 1})]

如果您已定义edges,请使用权重创建边缘:

edges=[(1,2),(1,4),(3,4),(4,2)]
edges_with_weights=[(a,b,1) for (a,b) in edges]
H=nx.Graph()
H.add_weighted_edges_from(edges_with_weights)
H.edges(data=True)
> [(1, 2, {'weight': 1}),
(1, 4, {'weight': 1}),
(2, 4, {'weight': 1}),
(3, 4, {'weight': 1})]