存储NetworkX图对象

8

我有一个拥有大约5000个节点的庞大图形,是使用networkX创建的。每次执行我的脚本,创建这个图需要大约30秒的时间。在这相对较长的时间之后,我才能运行像shortest_path等分析。

我的问题是,是否有任何方法可以将此图的对象存储在文件或类似的东西中,并且每次运行我的脚本时,networkX读取该文件并加载我的整个图形?


读取数据需要花费这么长时间,是因为它在进行大量的数据文件处理吗?如果是这样,那么仅保存图形到networkx支持的格式之一可能更有效率。https://networkx.org/documentation/stable//reference/readwrite/index.html - Joel
它需要很长时间,因为每次我都应该创建我的图形。我的节点在数据库中,我选择它们并使用“add_node”函数将它们添加到图形中。@Joel - Ali dashti
您可以考虑使用持久性存储解决方案来避免长时间加载。如果您正在寻找一种简单的解决方案,请尝试使用Memgraph - 一款开源的内存图形数据库。您可以将其用作NetworkX项目的即插即用替代品。了解更多信息:https://memgraph.com/memgraph-for-networkx[免责声明] 我在Memgraph工作,当我研究NetworkX的优缺点时,发现了这个SO问题。 - KateLatte
2个回答

13

从2.6版本开始,方法 write_gpickle read_gpickle 已被弃用。请改用以下方法:

import pickle

# save graph object to file
pickle.dump(G, open('filename.pickle', 'wb'))

# load graph object from file
G = pickle.load(open('filename.pickle', 'rb'))

请注意在open()中使用选项'wb'进行转储,以及选项'rb'进行加载。

2
谢谢,已经测试过了,使用 NetworkX 3.0,非常完美。 - Phil L.
1
同样适用于3.1版本。 - dave campbell

6

文档显示自2.6版本起已被弃用... - PatrickT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接