Networkx:使用通用功能进行边缘权重计算

时间:2013-06-28 17:34:06

标签: python algorithm graph networkx

假设我有一个函数euc_2d(graph, n1, n2)来计算同一图的两个节点之间的欧氏距离。每个节点都有一个给定的pos=(x,y),它是在创建图表时分配的。

NetworkX提供了一个函数来获取图的所有边的总权重,即graph.size(weight='weight')。这个方法的问题在于它假设每当我添加一个边时,我应该使用lambda函数显式地分配适当的边权重,如graph.add_edge(u,v,weight=?)

然而,这非常不方便(而且冗长)因为我一直在图中添加和删除边缘。

那么,每当我询问图表的总重量时,是否有一种pythonic方式可以告诉NetworkX透明地使用euc_2d()

1 个答案:

答案 0 :(得分:2)

graph.sizegraph.add_edge都没有使用函数来评估权重,它们只是使用给定的密钥存储值。为了更容易使用,只需定义一个函数来添加具有适当权重的边:

def add_euc2d_edge(graph, u, v):
    graph.add_edge(u, v, weight=euc_2d(graph, u, v))