python - 删除入度和出度都等于 1 的 networkx DiGraph 中的所有节点

标签 python graph-theory networkx

假设我在 NetworkX 中制作有向图:

import networkx as nx

G = nx.DiGraph()

n = ["A","B","C","D","E","F","H","I","J","K","L","X","Y","Z"]

e = [("A","Z"),("Z","B"),("B","Y"),("Y","C"),("C","G"),("G","H"),("G","I"),("I","J"),("K","J"),("J","L"),("F","E"),("E","D"),("D","X"),("X","C")]

G.add_nodes_from(n)

G.add_edges_from(e)

我如何删除所有入度和出度都等于 1 的节点,以便我的图看起来像这样?:

import networkx as nx

G = nx.DiGraph()

n = ["A","C","F","G","H","J","K","L"]

e = [("A","C"),("C","G"),("G","H"),("G","J"),("K","J"),("J","L")

G.add_nodes_from(n)

G.add_edges_from(e)

想法是移除“流通”节点并保留连接性。

最佳答案

尽管我看不到最终结果中从 ("A", "C") 和 ("G", "J") 获得边缘的位置,但以下代码可以满足您的需求。

import networkx as nx

def remove_edges(g, in_degree=1, out_degree=1):
    g2=g.copy()
    d_in=g2.in_degree(g2)
    d_out=g2.out_degree(g2)
    print(d_in)
    print(d_out)
    for n in g2.nodes():
        if d_in[n]==in_degree and d_out[n] == out_degree: 
            g2.remove_node(n)
    return g2

G_trimmed = remove_edges(G)
G_trimmed.edges()
#outputs [('C', 'G'), ('G', 'H'), ('K', 'J'), ('J', 'L')]
G_trimmed.nodes()
#outputs ['A', 'C', 'G', 'F', 'H', 'K', 'J', 'L']

关于python - 删除入度和出度都等于 1 的 networkx DiGraph 中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735252/

相关文章:

graph-theory - 寻找图中的循环

python - 使用 NetworkX/PyGraphviz 绘制多重图 : fine tuning node/edge position

python - NetworkX Graph 对象的“同构”比较,而不是默认的 'address' 比较

python - Self Join Pandas 后如何获得两列之间的唯一关系?

python - 如何将 abc.MutableMapping 的实现注册为 dict 子类?

python - 替换 python 脚本中 self.response.write 的 webapp2 用法

python - Python 如何使用 Gunicorn 和 Kubernetes 进行扩展?

python - python中的二维数组

java - java或c++中的邻接矩阵来查找连接的节点

python - 根据邻居节点的属性计算networkX中的平均邻居度