我已经注意到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}
为了得到我所期望的我应该。反转()图表。
为什么?
答案 0 :(得分:1)
如果您查看documentation,则说明:
节点u的紧密度中心性是所有n-1个其他节点中从到到的最短路径距离之和的倒数。由于距离之和取决于图中节点的数量,因此通过最小可能距离n-1的总和来标准化接近度。 [强调我的]
您的节点4没有从其到其他节点的路径,只是从其他节点到它。
考虑到两个方向路径的合理定义是在closeness_centrality
图上取closeness_centrality
的结果的倒数和.reverse()
的结果的倒数,添加它们然后取倒数(小心0值)。你会看到的一个问题是,如果有一对u和v在它们之间没有直接路径,那么两者的最终中心性都是0。
另一种选择涉及定义中心性,以便对于每对节点u和v,您可以获取任一方向上最短路径的距离。我认为这将涉及重写算法。您可以通过文档找到当前算法,其中包含指向源的链接(它是here)。它并不是特别复杂,所以我认为它是可行的。