nuk*_*guy 8 python io list save python-2.7
在Python 2.7中保存/加载大型列表的最快方法是什么?如果已经被问过我道歉,当我搜索时,我无法找到这个问题的答案...
更具体地说,我正在测试模拟某些东西的方法,我需要将我测试的每个方法的结果与精确的解决方案进行比较.我有一个Python脚本,它生成一个表示确切解决方案的值列表,我不希望每次运行新模拟时都重新计算它.因此,我想将它保存在某个地方,只需加载解决方案,而不是每次想要查看我的模拟结果有多好时重新计算它.
我也不需要保存的文件是人类可读的.我只需要能够在Python中加载它.
使用np.load和tolist比任何其他解决方案快得多:
In [77]: outfile = open("test.pkl","w")
In [78]: l = list(range(1000000))
In [79]: timeit np.save("test",l)
10 loops, best of 3: 122 ms per loop
In [80]: timeit np.load("test.npy").tolist()
10 loops, best of 3: 20.9 ms per loop
In [81]: timeit pickle.load(outfile)
1 loops, best of 3: 1.86 s per loop
In [82]: outfile = open("test.pkl","r")
In [83]: timeit pickle.load(outfile)
1 loops, best of 3: 1.88 s per loop
In [84]: cPickle.dump(l,outfile)
....:
1 loops, best of 3:
273 ms per loop
In [85]: outfile = open("test.pkl","r")
In [72]: %%timeit
cPickle.load(outfile)
....:
1 loops, best of 3:
539 ms per loop
Run Code Online (Sandbox Code Playgroud)
在python 3中,如果使用numpy数组,numpy会更有效:
In [24]: %%timeit
out = open("test.pkl","wb")
pickle.dump(l, out)
....:
10 loops, best of 3: 27.3 ms per loop
In [25]: %%timeit
out = open("test.pkl","rb")
pickle.load(out)
....:
10 loops, best of 3: 52.2 ms per loop
In [26]: timeit np.save("test",l)
10 loops, best of 3: 115 ms per loop
In [27]: timeit np.load("test.npy")
100 loops, best of 3: 2.35 ms per loop
Run Code Online (Sandbox Code Playgroud)
如果你想要一个列表,那么再次调用tolist并使用np.load会更快:
In [29]: timeit np.load("test.npy").tolist()
10 loops, best of 3: 37 ms per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10258 次 |
| 最近记录: |