3

我无法计算简单 NetworkX 加权图的中心性。
这是正常的还是我做错了什么?

我在 for 循环中添加了一个简单的边add_edge(c[0],c[1],weight = my_values),其中 c[0],c[1]是字符串(节点的名称)和整数。my_values这是结果边缘的示例:

('first node label', 'second node label', {'weight': 14})

(节点的数量并不重要——现在我只保留 20 个)

我的图表的边缘列表是一个元组列表,带有 (string_node1,string_node2,weight_dictionary) - 一切看起来都很好,因为我还能够绘制/保存/读取/图表...

为什么?:

  • nx.degree_centrality给我全1?
  • nx.closeness_centrality给我全1?

例子:

{'first node name': 1.0,
...
'last node name': 1.0}

谢谢你的帮助。

4

3 回答 3

4

很容易:

而不是使用nx.degree_centrality()我使用 my_graph.degree(weight='weight')- 我仍然认为这是模块中的一个基本缺陷......

...但是,问题仍然存在nx.closeness_centrality

于 2017-01-28T17:31:47.877 回答
3

为了closeness_centrality考虑权重,您必须添加一个distance属性1 / weight到图形边缘,如本期建议的那样。

这是执行此操作的代码(图表为g):

g_distance_dict = {(e1, e2): 1 / weight for e1, e2, weight in g.edges(data='weight')}
nx.set_edge_attributes(g, g_distance_dict, 'distance')
于 2018-11-01T00:39:22.763 回答
2

我知道这是一个很老的问题,但只是想指出您的度中心性值全部为 1 的原因可能是因为您的图是完整的(即所有节点都连接到其他每个节点),而度中心性指的是与图中节点连接的节点的比例。

根据networkx 的文档

节点 v 的度中心性是它连接到的节点的分数。

度中心值通过除以简单图 n-1 中的最大可能度来归一化,其中 n 是 G 中的节点数。

于 2019-09-15T13:51:29.653 回答