networkx - 权重与当前流量之间的意义

时间:2018-05-23 20:44:36

标签: python python-3.x networkx

我使用Python Networkx 2.1在无向图上计算中间度中心度和当前流量中介度,具有加权边缘。 我关注的是参数' weight'在networkx函数中。请考虑以下示例给出的图表

G= nx.Graph()
G.add_path([1, 2,4])
G.add_path([1, 3,4])
G[1][2]['weight'] = 20
G[1][3]['weight'] = 1
G[2][4]['weight'] = 1
G[3][4]['weight'] = 1

for u,v,d in G.edges(data=True):
    if 'weight' in d:
        if d['weight'] != 0:
            d['reciprocal'] = 1/d['weight']

enter image description here 在我的情况下,边缘重量是关系的强度,因此积极的东西。这个想法是,具有较高权重的边缘应该对中间性做出更多贡献。 鉴于这个想法,我是否正确地说,计算节点加权中介中心度和加权当前流量中介度的正确公式如下?

b = nx.betweenness_centrality(G, weight= 'reciprocal', normalized=False)
Out[46]: {1: 1.0, 2: 1.0, 3: 0.0, 4: 0.0}

f = nx.current_flow_betweenness_centrality(G, normalized= False, weight= 'weight', solver='lu')
Out[48]: 
{1: 1.3114754098360655,
 2: 1.3114754098360657,
 3: 0.6885245901639343,
 4: 0.6885245901639347}

请注意,在第一个公式中,我使用了边缘权重的倒数,因为我觉得这些算法被算法解释为距离,所以有些“不好”。 另一方面,在第二个公式中,我使用原始权重,因为在当前流量中介的算法中,似乎这更加重视节点1和2,就像在中间。因此,这里的权重似乎是“正面的”。

我想知道我是否做错了什么。实际上,在较大的图形上,如果我使用相同的权重参数而不是倒数,则两个度量相关更多。 这两种算法如何处理重量?

1 个答案:

答案 0 :(得分:1)

这可能对您没有太大帮助,但是对于其他有相同问题的人...

查看源代码可以发现,如果提供了权重,Dijkstra的算法将用于计算最短路径。 Dijkstra的算法通常将权重视为距离(即“差”),这种实现也不例外。因此,取边缘权重的倒数将是正确的方法。我不确定您的意思是“在较大的图中,这两个指标之间的相关性更高”。这将取决于您的大图之间的相似程度。

源代码:https://networkx.github.io/documentation/latest/_modules/networkx/algorithms/centrality/betweenness.html