如何在networkx图中只保留具有2个或更多传出边缘或0个传出边缘的节点?

14

我在networkx中有一个有向图。我希望只保留那些具有两个或多个出边或没有出边的节点。我该怎么做?

或者

如何从networkx图中删除仅具有一个出边的节点。


4
如果你有一个图表,找到只有一条出边的节点并将其删除,那么你可以创建一个新的图表,其中仍然存在一个只有一条出边的节点(假设在删除某个节点之前该图表有两个这样的节点之一),在这种情况下,你想要做什么? - DSM
1个回答

27
你可以使用 out_degree 方法查找图形 G 中具有一个外向边的节点。
outdeg = G.out_degree()
to_remove = [n for n in outdeg if outdeg[n] == 1]

接下来是移除:

G.remove_nodes_from(to_remove)

如果你想创建一个新的图形而不是直接修改现有的图形,请创建一个子图:

to_keep = [n for n in outdeg if outdeg[n] != 1]
G.subgraph(to_keep)

2
删除这些节点后,出度是否会改变? - user3341953
10
在networkx的较新版本中,可能需要使用类似[n for (n, deg) in outdeg if deg == 1]的语法。 - Davide Fiocco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接