【问题标题】:Is there a networkx functiuon to calculate number of edges between communities?是否有 networkx 函数来计算社区之间的边数?
【发布时间】:2020-11-22 12:04:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: python pandas graph networkx


    【解决方案1】:

    有! induced_graph function 似乎正是您要找的。​​p>

    此功能允许您:

    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 函数

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 2013-06-26
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多