在磁盘上保留numpy数组的最佳方法
我正在寻找一种保留大型numpy数组的快速方法。我想将它们以二进制格式保存到磁盘中,然后相对较快地将它们读回到内存中。不幸的是,cPickle不够快。
我找到了numpy.savez和numpy.load。但是奇怪的是,numpy.load将一个npy文件加载到“内存映射”中。这意味着对数组的常规操作确实很慢。例如,这样的事情真的很慢:
#!/usr/bin/python
import numpy as np;
import time;
from tempfile import TemporaryFile
n = 10000000;
a = np.arange(n)
b = np.arange(n) * 10
c = np.arange(n) * -0.5
file = TemporaryFile()
np.savez(file,a = a, b = b, c = c);
file.seek(0)
t = time.time()
z = np.load(file)
print "loading time = ", time.time() - t
t = time.time()
aa = z['a']
bb = z['b']
cc = z['c']
print "assigning time = ", time.time() - t;
更确切地说,第一行会非常快,但是将数组分配给的其余行却很obj
慢:
loading time = 0.000220775604248
assining time = 2.72940087318
有没有更好的方法来保存numpy数组?理想情况下,我希望能够在一个文件中存储多个数组。
-
我是hdf5的忠实拥护者,用于存储大型numpy数组。在python中处理hdf5有两种选择:
两者都旨在有效地处理numpy数组。