是否有 networkx 函数来计算社区之间的边数?

Is there a networkx functiuon to calculate number of edges between communities?

我用过Louvain算法进行社区检测。然后相对于彼此定位社区:创建一个新的加权图,其中每个节点对应一个社区,权重对应社区之间的边数。

我的问题是如何有效地计算“社区之间的边数”。我知道我可以为每个社区的每两个节点做大量的循环。

Networkx 中是否有实现此功能的函数?

有! induced_graph function 似乎是你要找的。

此功能允许您:

  1. 获取以社区为节点的诱导图
  2. 诱导图中节点之间的WEIGHT等于原始图中节点之间的边数。

像这样:

induced_graph = community.induced_graph(p1, giant_component, weight='WEIGHT')
for u,v,a in induced_graph.edges(data=True):
    print(u,v,a)

这将打印 Community_a Community_b {'WEIGHT': NumberOfLinks}

这是一个包含 7 个社区的分区示例:

0 1 {'WEIGHT': 8782}
0 0 {'WEIGHT': 15336}
0 3 {'WEIGHT': 9858}
0 4 {'WEIGHT': 4306}
0 2 {'WEIGHT': 1216}
0 7 {'WEIGHT': 1}
0 6 {'WEIGHT': 2}
0 5 {'WEIGHT': 5}
1 1 {'WEIGHT': 10116}
1 3 {'WEIGHT': 6728}
1 4 {'WEIGHT': 4030}
1 2 {'WEIGHT': 667}
1 5 {'WEIGHT': 38}
1 7 {'WEIGHT': 1}
1 6 {'WEIGHT': 1}
2 3 {'WEIGHT': 605}
2 4 {'WEIGHT': 348}
2 2 {'WEIGHT': 470}
3 3 {'WEIGHT': 13921}
3 4 {'WEIGHT': 2805}
3 5 {'WEIGHT': 45}
3 6 {'WEIGHT': 2}
3 7 {'WEIGHT': 1}
4 4 {'WEIGHT': 3273}
4 5 {'WEIGHT': 5}
5 5 {'WEIGHT': 37}
6 6 {'WEIGHT': 1}
7 7 {'WEIGHT': 1}

The docs 用于 induced_graph 函数