当且仅当nx图保持连接时,是否从nx图中删除节点?

2024-04-19 18:44:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从现有的nx图G中删除节点,如果且仅当该图保持连接。最有效的方法是什么

例如,我删除节点5的尝试是:

node = 5

# make temporary copy
T = G.copy()

# remove node from copy
T.remove_node(node)

# replace G with T if the graph is connected
if nx.is_connected(T):
    G = T

我只是在犹豫是否要创建副本来实现这一点,因为我正在迭代地从大型图中删除节点。有更好的方法吗


Tags: the方法fromnodemakeif节点is
1条回答
网友
1楼 · 发布于 2024-04-19 18:44:44

您可能忽略了Graph.copy()可用的单个参数,即Graph.copy(as_view = False)。此参数的作用是提供“原始结构的副本,而不需要任何内存来复制信息”。您可以在模拟结构上执行删除操作,并在保持完全连接后,在真实结构上执行删除操作。如果您担心存储两个完整网络的内存阻塞,那么使用该参数可能是您的解决方案。如果没有,您需要在问题中提供更多细节和一些可复制的代码

import networkx as nx
import time as t

base_graph = nx.circulant_graph(n=1000, offsets=[1])
if nx.is_connected(base_graph):
    print('Graph is connected.')

node_id_to_remove = 500

start_time = t.time()
copied_real_graph = base_graph.copy(as_view=False)
print(f"Execution Time: {(t.time() - start_time)}")

start_time = t.time()
copied_view_graph = base_graph.copy(as_view=True)
print(f"Execution Time: {(t.time() - start_time)}")

         -
Graph is connected.
Execution Time: 0.005429983139038086
Execution Time: 0.0003299713134765625

相关问题 更多 >