我使用networkx
从节点列表创建了一个图。它有自环。如何删除自环?以下是示例:
import networkx as NX
G=NX.Graph()
G.add_edge(1,2)
G.add_edge(1,1)
print (G.edges())
[(1, 2), (1, 1)]
我不想要 (1, 1)
边。
(以下是针对networkx 1.x版本的说明)
如果您正在使用networkx 2.x,请尝试:
G.remove_edges_from(nx.selfloop_edges(G))
如果您有一个 MultiGraph
(例如 configuration_model
生成的), 并且使用旧版本的 2.x 存在次要错误,则此方法可能无法正常工作。 如果是这样,并且您不想升级,则需要在删除边缘之前将其转换为列表。
G.remove_edges_from(list(nx.selfloop_edges(G)))
这个 bug 已经被修复 https://github.com/networkx/networkx/issues/4068。
在 版本 1.x(我最初回答这个问题时):
G.remove_edges_from(G.selfloop_edges())
自循环方法在2.0版本中已被弃用作为图形方法,推荐使用networkx函数。
1.x版本:
G.remove_edges_from(G.selfloop_edges())
版本 2.x:
G.remove_edges_from(nx.selfloop_edges(G))
方法remove_edge
可以满足您的需求。只需要过滤源和目标相同时的边:
for u, v in G.edges_iter():
if u == v:
G.remove_edge(u,v)