【问题标题】:Aggregating nodes in networkx在networkx中聚合节点
【发布时间】:2025-11-27 01:35:01
【问题描述】:

如何有效地聚合节点并获得加权链接或 MultiGraph?通过聚合,我的意思是在重新标记过程中通过映射字典减少节点数量:

import networkx as nx

G = nx.path_graph(5)
mapping_dict = {0: 'A', 1: 'B', 2: 'C', 3: 'A', 4: 'B', 5: 'C'}
H = nx.relabel_nodes(G, mapping_dict)
for edge in H.edges(data=True):
     print edge
#('A', 'C', {})
#('A', 'B', {})
#('C', 'B', {})

但是我希望HAC(以及ABBC)或两个平行边之间有一个权重2 的链接。有办法吗?

【问题讨论】:

    标签: python aggregate networkx


    【解决方案1】:

    您可以创建一个新的多图(或图表)。

    import networkx as nx
    G = nx.path_graph(5)
    mapping_dict = {0: 'A', 1: 'B', 2: 'C', 3: 'A', 4: 'B', 5: 'C'}
    H = nx.MultiGraph()
    for (u,v) in G.edges():
        H.add_edge(mapping_dict[u],mapping_dict[v])
    for edge in H.edges():
         print edge
    #('A', 'C')
    #('A', 'B')
    #('A', 'B')
    #('C', 'B')
    

    【讨论】:

    • 一点评论。如果G 中有一个节点是隔离的,那么H 中可能会丢失它。可以添加:H.add_nodes_from([mapping_dict[u] for u in G.nodes()]) 或类似内容。