假设我有一个由这个矩阵定义的图:
test = np.array([[0, 0, 4, 0],
[0, 0, 6, 0],
[4, 6, 0, 10],
[0, 0, 10, 0]])
import networkx as nx
test_nx = nx.from_numpy_array(test)
接下来,我想计算这个图的每个节点的加权贴近度中心性。
nx.closeness_centrality(test_nx, distance="edges")
我得到:
{0: 0.6, 1: 0.6, 2: 1.0, 3: 0.6}
但是,这显然没有考虑边缘权重。我猜原因是我没有正确地通过"距离"的争论。
根据文件:
closeness_centrality(G, u=None, distance=None, normalized=True)
distance (edge attribute key, optional (default=None)) – Use the
specified edge attribute as the edge distance in shortest path
calculations
有人能告诉我如何将边缘权重传递给这个函数吗?我想要的输出是一个接近中心值的字典(每个节点一个(,它认为这些边有权重,而且它们不是简单的二进制。
如果您使用以下方法查看边缘:
print(test_nx.edges(data=True))
# output: [(0, 2, {'weight': 4}), (1, 2, {'weight': 6}), (2, 3, {'weight': 10})]
可以看到,用于保存边权重的关键字是weight
。正确的距离键将是这个。
nx.closeness_centrality(test_nx, distance="weight")
# output {0: 0.10714285714285714, 1: 0.09375, 2: 0.15, 3: 0.075}