首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在磁盘上保留numpy数组的最佳方法

在磁盘上保留numpy数组的最佳方法
EN

Stack Overflow用户
提问于 2012-03-08 22:28:12
回答 6查看 120.2K关注 0票数 148

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

我找到numpy.saveznumpy.load了。但奇怪的是,numpy.load将npy文件加载到“内存映射”中。这意味着常规的数组操作非常慢。例如,像这样的东西会非常慢:

代码语言:javascript
复制
#!/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的其余行却慢得离谱:

代码语言:javascript
复制
loading time =  0.000220775604248
assining time =  2.72940087318

有没有更好的保存numpy数组的方法?理想情况下,我希望能够在一个文件中存储多个数组。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-03-08 23:02:41

我是hdf5的铁杆粉丝,因为它能存储大的数值数组。在python中有两个处理hdf5的选项:

http://www.pytables.org/

http://www.h5py.org/

这两种方法都可以有效地与numpy数组一起使用。

票数 69
EN

Stack Overflow用户

发布于 2017-01-02 19:21:28

我比较了存储numpy数组的几种方法的性能(空间和时间)。它们中很少有支持每个文件多个数组的,但也许它还是有用的。

Npy和二进制文件对于密集数据来说既快又小。如果数据是稀疏的或非常结构化的,您可能希望使用npz进行压缩,这将节省大量空间,但会消耗一些加载时间。

如果可移植性是个问题,那么二进制比npy更好。如果人类的可读性很重要,那么你将不得不牺牲大量的性能,但使用csv可以很好地实现这一点(当然,csv也非常可移植)。

更多细节和代码请访问the github repo

票数 254
EN

Stack Overflow用户

发布于 2012-03-09 14:45:39

savez()将数据保存为zip文件,压缩和解压缩该文件可能需要一些时间。您可以使用save() & load()函数:

代码语言:javascript
复制
f = file("tmp.bin","wb")
np.save(f,a)
np.save(f,b)
np.save(f,c)
f.close()

f = file("tmp.bin","rb")
aa = np.load(f)
bb = np.load(f)
cc = np.load(f)
f.close()

要将多个数组保存到一个文件中,只需先打开该文件,然后按顺序保存或加载这些数组。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9619199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档