networkx-权重和电流之间的权重的含义

For*_*nce 5 python networkx python-3.x

我正在使用Python Networkx 2.1在具有权重边缘的无向图上计算中间性中心性和当前流动中间性中心性。我担心的是networkx函数中参数“ weight”的含义。请考虑以下示例给出的图形

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']
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 在我看来,权重是关系的力量,因此是积极的。想法是,权重较高的边缘应为中间性做出更多贡献。有了这个想法,我是否正确地说,以下是计算节点加权中间性和加权电流中间性的正确公式?

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}
Run Code Online (Sandbox Code Playgroud)

请注意,在第一个公式中,我使用了边缘权重的倒数,因为我感觉这些权重被算法解释为距离,所以有些“不好”。另一方面,在第二个公式中我使用了原始权重,因为在电流中间性算法中,这似乎对节点1和2的重要性更高,例如中间性。因此,这里的权重似乎是“积极的”。

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

小智 5

这可能对你现在没有多大帮助,但对于其他有同样问题的人来说......

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

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