python networkx 在某些条件下删除节点和边

Posted

技术标签:

【中文标题】python networkx 在某些条件下删除节点和边【英文标题】:python networkx remove nodes and edges with some condition 【发布时间】:2013-08-18 04:01:42 【问题描述】:

在 python 库 networkx 中,我想删除具有某些属性的图的节点和边。例如,假设我想删除节点度数

vdict = g.degree_dict()         #dictionary of nodes and their degrees
g.remove_from_nodes(v in g s.t. vdict[v] < 2)

我见过一些使用集合论符号的语法,但由于我还是 python 新手,我不知道如何使用它。如何将其转换为可用的 Python 代码?

【问题讨论】:

【参考方案1】:

Graph.remove_nodes_from() 方法采用节点列表(实际上是容器)。所以你只需要创建一个满足你条件的列表。您可以使用 Python 的 list comprehension 结构紧凑地创建要删除的节点列表。

In [1]: import networkx as nx

In [2]: G = nx.Graph()

In [3]: G.add_edge(1,2)

In [4]: G.add_edge(1,3)

In [5]: G.add_edge(1,4)

In [6]: G.add_edge(2,3)

In [7]: G.add_edge(2,4)

In [8]: G.degree()
Out[8]: 1: 3, 2: 3, 3: 2, 4: 2

In [9]: remove = [node for node,degree in dict(G.degree()).items() if degree > 2]

In [10]: remove
Out[10]: [1, 2]

In [11]: G.nodes()
Out[11]: [1, 2, 3, 4]

In [12]: G.remove_nodes_from(remove)

In [13]: G.nodes()
Out[13]: [3, 4]

【讨论】:

由于我之前没有使用过这种语言结构,您能否添加一个关于您初始化 remove 的集合论语言的小说明? 谢谢,我需要知道正确的术语。 你可以像这样内联第 9 行和第 12 行,具有类似的理解:G.remove_nodes_from(node for node, degree in G.degree().items() if degree &gt; 2) 但是,如果您在检查数据结构 (G) 时修改数据结构 (G),请小心内联 (G.degree().items())。 第 9 行出现“AttributeError: 'DegreeView' object has no attribute 'items'”错误。【参考方案2】:

如果我们有一个初始化图g,则以下将设置fg 受限于每个顶点的度数必须> 0。我们可以很容易地用一个变量来概括0:

f = nx.Graph()                                                                                                                                     
fedges = filter(lambda x: g.degree()[x[0]] > 0 and g.degree()[x[1]] > 0, g.edges())
f.add_edges_from(fedges)

【讨论】:

【参考方案3】:

请注意,在 Aric 的 networkx==2.2 中,您需要将 G.degree() 包装在字典中,因为 networkx 视图对象没有 items 方法。这一行将是:

[node for node,degree in dict(G.degree()).items() if degree > 2]

【讨论】:

【参考方案4】:

从 networkx==2.6 开始,您可以将其用于图形 G

remove = [node for node, degree in G.degree() if degree < 2]
G.remove_nodes_from(remove)

【讨论】:

以上是关于python networkx 在某些条件下删除节点和边的主要内容,如果未能解决你的问题,请参考以下文章

Python数模笔记-NetworkX条件最短路径

Python数模笔记-NetworkX条件最短路径

python networkx 都可以干啥

是否可以在删除节点的同时在 networkX 中为图形设置动画?

python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径

如何根据注释属性对networkx python图中的节点进行分组?