gpt4 book ai didi

python - 循环遍历 networkx 中的连接组件并提取包含某些节点的组件

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:16 26 4
gpt4 key购买 nike

我有一个非常大的无向网络加载到由许多断开连接的组件组成的 NetworkX graph() 中。我还将一组感兴趣的节点加载到一个集合中。我想查看所有提取物,所有组件都至少包含一个感兴趣的节点。

# create empty graph
g = nx.Graph()

# add edges to the graph
g.add_edges_from([['a','b'],['a','c'],['b','c'],['d','e'],['e','f'],['d','f'],['g','h'],['g','i'],['h','i']])

# load nodes of interest into a set
interest_nodes = set(['a', 'b', 'f'])

# number of connected components
nx.number_connected_components(g)

# loop through each connected component and add all of the edges for that component to a list if a node in that component is found in the interest_nodes
interest_edges = []
for i in nx.connected_component_subgraph(g):
for u in i.edges():
if u in interest_nodes:
interest_edges.append(u)

但是,我得到一个空列表。

理想情况下,我想要返回一个列表,其中包含至少包含 interest_nodes 集中的一个节点的任何连接组件中的所有边。我应该在下面得到什么,但是我没有得到任何东西。

interest_edges = [('a', 'c'),
('a', 'b'),
('c', 'b'),
('e', 'd'),
('e', 'f'),
('d', 'f')]

最佳答案

你很接近。最简单的方法是检查每个组件,通过检查集合交集的长度来查看节点集合是否重叠。

import networkx as nx

g = nx.Graph([['a','b'],['a','c'],['b','c'],['d','e'],['e','f'],['d','f'],['g','h'],['g','i'],['h','i']])

interest_nodes = set(['a', 'b', 'f'])

interest_edges = []
for component in nx.connected_component_subgraphs(g):
if len(set(component) & interest_nodes) > 0:
interest_edges.extend(component.edges())

print interest_edges
# output
# [('a', 'c'), ('a', 'b'), ('c', 'b'), ('e', 'd'), ('e', 'f'), ('d', 'f')]

关于python - 循环遍历 networkx 中的连接组件并提取包含某些节点的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656117/

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