如何挑选和取消使用NetworkX创建的MultiDiGraph列表?

时间:2017-11-08 12:28:40

标签: list pickle networkx

我有一个使用NetworkX创建的MultiDiGraphs列表(在每对节点之间允许多个边缘的有向图)。我已将这些图存储在列表中。现在,我想挑选这个列表,所以我可以在将来使用它 - 我知道我可以使用其他存储方法但我对此特别感兴趣。

如果我想在将来使用它,我还希望能够将腌制信息加载到另一个图表列表中。

有人能告诉我如何挑选和捣蛋这种物体吗?感谢。

2 个答案:

答案 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")