networkx合并图ram问题



我是networkx的新手,在运行合并两个不同图形的函数时,似乎遇到了RAM问题。此函数将两个图共用的边的权重相加。我有一个8到9个图的列表,每个图包含大约1000-2000个节点,我在这个循环中合并这些节点:

FinalGraph = nx.Graph()
while len(graphs_list)!=0:
FinalGraph  = merge_graphs(FinalGraph,graphs_list.pop())

使用此功能

def merge_graphs(graph1, graph2):
edges1 = graph1.edges
edges2 = graph2.edges 
diff1 = edges1 - edges2
if diff1==edges1:
return nx.compose(graph1,graph2)
else:
common_edges = list(edges1 - diff1)
for edges in common_edges:
graph1[edges[0]][edges[1]]['weight'] += graph2[edges[0]][edges[1]]['weight']
return nx.compose(graph2, graph1)

当运行我的脚本时,我的计算机在到达这个循环时总是会冻结。我是在做某种糟糕的参考周期还是什么?我是不是在networkx文档中缺少了一些更有效的东西,可以帮助我不要将此功能用于我的目的?谢谢你阅读我的文章,我希望我能理解

由于您试图检查条件是否允许使用compose,这里似乎有很多额外的工作要做。这可能是造成麻烦的原因。我认为只遍历图的边和节点可能会更好。以下看起来是一种更直接的方法(不需要创建那么多变量,这可能会导致内存问题(

final_graph = nx.Graph()
for graph in graphs_list:
final_graph.add_nodes_from(graph.nodes())
for u, v, w in graph.edges(data=True):
if final_graph.has_edge(u,v):
final_graph[u][v]['weight'] += w
else:
final_graph.add_edge(u,v,weight = w)

最新更新