如何将edge属性作为边缘距离传递给nx.closeness_centrality()?

时间:2019-11-01 02:54:41

标签: python networkx

假设我有一个由该矩阵定义的图形:

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

有人可以建议我如何将边缘权重传递给此功能吗?我期望的输出将是一个紧密度中心值字典(每个节点一个),该字典认为这些边缘具有权重,并且它们不只是二进制。

1 个答案:

答案 0 :(得分:1)

如果使用此方法查看边缘:

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}