在networkx中聚合节点
Posted
技术标签:
【中文标题】在networkx中聚合节点【英文标题】:Aggregating nodes in networkx 【发布时间】:2015-09-21 21:36:59 【问题描述】:如何有效地聚合节点并获得加权链接或 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', )
但是我希望H
在A
和C
(以及A
和B
和B
和C
)或两个平行边之间有一个权重2 的链接。有办法吗?
【问题讨论】:
【参考方案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()])
或类似内容。以上是关于在networkx中聚合节点的主要内容,如果未能解决你的问题,请参考以下文章