gpt4 book ai didi

python - Networkx:提取包含给定节点的连通分量(有向图)

转载 作者:太空狗 更新时间:2023-10-29 17:03:33 26 4
gpt4 key购买 nike

我正在尝试从一个大图中提取包含特定节点的所有连接节点的子图。

Networkx 库中有解决方案吗?

[编辑]
我的图是有向图

[编辑]
简单改写:
我想要我的图形部分包含我的特定节点 N_i 以及使用任何传入或传出边直接或间接连接(通过其他节点)的所有节点。
示例:

>>> g = nx.DiGraph()
>>> g.add_path(['A','B','C',])
>>> g.add_path(['X','Y','Z',])
>>> g.edges()
[('A', 'B'), ('B', 'C'), ('Y', 'Z'), ('X', 'Y')]

我想要的结果是:

>>> g2 = getSubGraph(g, 'B')
>>> g2.nodes()
['A', 'B', 'C']
>>> g2.edges()
[('A', 'B'), ('B', 'C')]

最佳答案

您可以使用 shortest_path() 查找从给定节点可达的所有节点。在您的情况下,您需要首先将图形转换为无向表示,以便遵循入边和出边。

In [1]: import networkx as nx

In [2]: >>> g = nx.DiGraph()

In [3]: >>> g.add_path(['A','B','C',])

In [4]: >>> g.add_path(['X','Y','Z',])

In [5]: u = g.to_undirected()

In [6]: nodes = nx.shortest_path(u,'B').keys()

In [7]: nodes
Out[7]: ['A', 'C', 'B']

In [8]: s = g.subgraph(nodes)

In [9]: s.edges()
Out[9]: [('A', 'B'), ('B', 'C')]

或者在一行中

In [10]: s = g.subgraph(nx.shortest_path(g.to_undirected(),'B'))

In [11]: s.edges()
Out[11]: [('A', 'B'), ('B', 'C')]

关于python - Networkx:提取包含给定节点的连通分量(有向图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13914920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com