我也在尝试加快 networkx 图的加载/存储。我正在使用该adjacency_graph
方法将图形转换为可序列化的东西,例如,请参见以下代码:
from networkx.generators import fast_gnp_random_graph
from networkx.readwrite import json_graph
G = fast_gnp_random_graph(4000, 0.7)
with open('/tmp/graph.pickle', 'wb+') as f:
data = json_graph.adjacency_data(G)
pickle.dump(data, f)
with open('/tmp/graph.pickle', 'rb') as f:
d = pickle.load(f)
H = json_graph.adjacency_graph(d)
但是,这种adjacency_graph
转换方法很慢,因此在酸洗中获得的时间可能会浪费在转换中。
所以这实际上并没有加快速度,真可惜。运行此代码给出以下时间:
N=1000
0.666s ~ generating
0.790s ~ converting
0.237s ~ storing
0.295s ~ loading
1.152s ~ converting
N=2000
2.761s ~ generating
3.282s ~ converting
1.068s ~ storing
1.105s ~ loading
4.941s ~ converting
N=3000
6.377s ~ generating
7.644s ~ converting
2.464s ~ storing
2.393s ~ loading
12.219s ~ converting
N=4000
12.458s ~ generating
19.025s ~ converting
8.825s ~ storing
8.921s ~ loading
27.601s ~ converting
这种指数增长可能是由于图的边缘呈指数增长。这是一个测试要点,以防您想自己尝试
https://gist.github.com/wires/5918834712a64297d7d1