在计算亲密度中心性之前,为什么要反转Networkx DiGraph的弧线?

时间:2015-07-04 14:00:28

标签: networkx

我已经注意到Networkx库中的这种奇怪的行为,(至少对我来说)是出乎意料的。 在下面的示例中,我创建了一个包含4个节点的有向图,其中每个节点仅连接到其后继节点。我希望节点4(可以从1,2和3到达)应该具有最高的中心性,但我得到了不同的东西。

pd=nx.DiGraph()
pd.add_edges_from([(0,1),(1,2),(2,3),(3,4)])
nx.closeness_centrality(pd)
{0: 0.4, 1: 0.375, 2: 0.3333333333333333, 3: 0.25, 4: 0.0}

为了得到我所期望的我应该。反转()图表。

为什么?

1 个答案:

答案 0 :(得分:1)

如果您查看documentation,则说明:

  

节点u的紧密度中心性是所有n-1个其他节点中的最短路径距离之和的倒数。由于距离之和取决于图中节点的数量,因此通过最小可能距离n-1的总和来标准化接近度。 [强调我的]

您的节点4没有从其到其他节点的路径,只是从其他节点到它。

考虑到两个方向路径的合理定义是在closeness_centrality图上取closeness_centrality的结果的倒数和.reverse()的结果的倒数,添加它们然后取倒数(小心0值)。你会看到的一个问题是,如果有一对u和v在它们之间没有直接路径,那么两者的最终中心性都是0。

另一种选择涉及定义中心性,以便对于每对节点u和v,您可以获取任一方向上最短路径的距离。我认为这将涉及重写算法。您可以通过文档找到当前算法,其中包含指向源的链接(它是here)。它并不是特别复杂,所以我认为它是可行的。