如何在NetworkX中将两个相邻的边合并为一条边

huangapple go评论60阅读模式
英文:

How to merge 2 adjacent edges into one edge in NetworkX

问题

我有一个包含3个节点:a、b、c和2条边(a,b)、(b,c)的图。现在我想移除节点b,并将边(a,b)和(b,c)合并为一条边(a,c),networkx中是否有适用于这种图操作的API?谢谢。

英文:

e.g. I have one graph with 3 nodes: a,b,c and 2 edges (a,b), (b,c). Now I'd like remove node b and merge edges (a,b),(b,c) into one edge (a,c), is there any api in networkx for this kind of graph manipulation? Thanks

答案1

得分: 1

你可以使用 networkx.contracted_nodes 来生成一个将 b 合并到 a 的新图:

G = nx.from_edgelist([('a', 'b'), ('b', 'c')])

H = nx.contracted_nodes(G, 'a', 'b', self_loops=False)

或者使用 contracted_edge:

H = nx.contracted_edge(G, ('a', 'b'), self_loops=False)

注:这将返回一个新图,如果要原地更新,请使用 copy=False

在操作之前:

如何在NetworkX中将两个相邻的边合并为一条边

在操作之后:

如何在NetworkX中将两个相邻的边合并为一条边

英文:

You can use networkx.contracted_nodes to generate a new graph with b merged into a:

G = nx.from_edgelist([('a', 'b'), ('b', 'c')])

H = nx.contracted_nodes(G, 'a', 'b', self_loops=False)

Or using contracted_edge:

H = nx.contracted_edge(G, ('a', 'b'), self_loops=False)

NB. this returns a new graph, if you want to update in place, use copy=False.

Before:

如何在NetworkX中将两个相邻的边合并为一条边

After:

如何在NetworkX中将两个相邻的边合并为一条边

huangapple
  • 本文由 发表于 2023年7月17日 14:20:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/76701919.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定