我有一个使用NetworkX创建的MultiDiGraphs列表(在每对节点之间允许多个边缘的有向图)。我已将这些图存储在列表中。现在,我想挑选这个列表,所以我可以在将来使用它 - 我知道我可以使用其他存储方法但我对此特别感兴趣。
如果我想在将来使用它,我还希望能够将腌制信息加载到另一个图表列表中。
有人能告诉我如何挑选和捣蛋这种物体吗?感谢。
答案 0 :(得分:0)
我将cPickle
用于python2(它更快)但pickle
用于python3,因此import
因此取决于你使用的python。
import cPickle as pickle # python2
import pickle # python3
import networkx as nx
# Make graph
G = nx.MultiDiGraph()
G.add_edges_from([(1,2),(1,2),(3,4),(1,3)])
# Dump graph
with open("/path/to/file/multigraph.p", 'wb') as f:
pickle.dump(G, f)
# Load graph
with open("/path/to/file/multigraph.p", 'rb') as f: # notice the r instead of w
G_loaded = pickle.load(f)
就这么简单。
[编辑] 要pickle.dump
图表列表:
# Dump List of graphs
l = [G, G_loaded]
with open("/path/to/file/multigraph.p", 'wb') as f:
pickle.dump(l, f)
# Load List of graphs
with open("/path/to/file/multigraph.p", 'rb') as f:
l_load = pickle.load(f)
现在l_load[0]
包含多图G
。
答案 1 :(得分:0)
不确定networkx的库内util方法在2017年是否可用,但是对于当前(2020年)参考,您可以使用:
gpickle
中的 networkx.readwrite
模块
类似下面的伪代码。在后台,该方法本质上是在做相同的事情,即调用pickle.dummp(list,path)
# Gs : List[nx.MultiGraph] = [gs1, gs2,...,gsT]
out_fp = f'{data_dir}/{dataset}/graphs'
logger.info(f'| saving nx.Graphs outputs to {out_fp}/{output_prefix}_*.gpickle')
nx.write_gpickle(Gs, f"{out_fp}/{output_prefix}_Gs.gpickle")