这种中间性计算正确吗?

时间:2019-06-12 19:22:33

标签: python networkx

在这个简单的图形中,我尝试计算从2到6的路径的所有节点之间的间隔。

G=nx.Graph()
edge=[(1,5),(2,5),(3,5),(4,5),(4,6),(5,7),(7,6)]
G.add_edges_from(edge)
btw=nx.betweenness_centrality_subset(G,[2],[6])

但是结果是:

{1: 0.0, 5: 0.5, 2: 0.0, 3: 0.0, 4: 0.25, 6: 0.0, 7: 0.25}

我想知道为什么节点5的中间度为0.5而应该为1,因为总最短路径数为2,并且两者都包括5,而节点4和7应该为0.5

2 个答案:

答案 0 :(得分:4)

它看起来像个错误。

这是我的猜测。该错误似乎来自_rescale函数。在此,如果图形是间接的,则计算值将乘以0.5。

由于在一般的betweenness_centrality中,一个节点被认为是betweenness_centrality_sub的两次(计算了最短路径for each node in the graph),因此没有必要,因为仅计算了最短路径for the sources nodes

示例:

nx.betweenness_centrality_subset(G,[2,6],[2,6])
# {1: 0.0, 5: 1.0, 2: 0.0, 3: 0.0, 4: 0.5, 6: 0.0, 7: 0.5}

因此,如果我的猜测正确,则只需将计算结果乘以2。

答案 1 :(得分:0)

我相信这不是错误。

首先,请注意结果的标准化。如果未规范化,您将获得通过每个节点的路径数。标准化后,您将获得路径的一部分。默认情况下,nx.betweenness_centrality(G)被标准化。默认情况下,nx.betweenness_centrality_subset(G,[2],[6])未标准化。

第二,对于无向图,未归一化的betweenness_centrality值计算无向路径。这意味着每个有向路径都计为无向路径的一半。这就是为什么您的原始帖子的值为0.5和0.25,而不是1.0和0.5。以这种方式对路径进行计数,以确保您获得的路径永远不会超过网络中无向路径的总数。当您进行标准化时,这不是问题。