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

新手上路,请多包涵

在 python 库 networkx 中,我想删除具有某些属性的图形的节点和边。例如,假设我想删除节点度数 < 2 的所有节点和边。考虑以下伪代码:

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

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

原文由 CodeKingPlusPlus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

如果我们有一个初始化图 g 以下将设置 fg 受制于每个顶点必须有度数的约束。我们可以轻松地用变量概括 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)

原文由 CodeKingPlusPlus 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 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]

原文由 Aric 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏