如何在磁盘上保存numpy数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (67)

我正在寻找一种快速的方法来保存大型的numpy数组。我想把它们以二进制格式保存到磁盘中,然后相对较快地将它们读入内存。不幸的是,cPickle不够快。

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数组?理想情况下,我希望能够在一个文件中存储多个数组。

提问于
用户回答回答于
用户回答回答于

我比较了许多存储numpy数组的方法的性能(空间和时间)。它们中很少支持每个文件的多个数组,但可能无论如何它都是有用的。

对于密集数据,NPY和二进制文件都是非常快和小的。如果数据是稀疏的或非常结构化的,您可能需要使用NPZ与压缩,这将节省大量的空间,但需要一些加载时间。

如果可移植性是一个问题,二进制比NPY更好。

扫码关注云+社区