我正在寻找一种快速保存大型numpy数组的方法.我想以二进制格式将它们保存到磁盘,然后相对快速地将它们读回内存.不幸的是,cPickle还不够快.
我找到了numpy.savez和numpy.load.但奇怪的是,numpy.load将npy文件加载到"memory-map"中.这意味着定期操作数组确实很慢.例如,像这样的东西会非常慢:
#!/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; …Run Code Online (Sandbox Code Playgroud) 我做了很多统计工作,并使用Python作为我的主要语言.我使用的一些数据集虽然可以占用20GB的内存,但这使得使用numpy,scipy和PyIMSL中的内存函数对它们进行操作几乎是不可能的.统计分析语言SAS在这里具有很大的优势,因为它可以对来自硬盘的数据进行操作而不是严格的内存处理.但是,我想避免在SAS中编写大量代码(出于各种原因),因此我试图确定我使用Python的选项(除了购买更多的硬件和内存).
我应该澄清一下像map-reduce这样的方法对我的大部分工作都无济于事,因为我需要对完整的数据集进行操作(例如计算分位数或拟合逻辑回归模型).
最近我开始玩h5py并认为这是我发现允许Python像SAS一样操作磁盘上的数据(通过hdf5文件),同时仍然能够利用numpy/scipy/matplotlib等的最佳选择.我想听听是否有人在类似设置中使用Python和h5py以及他们发现了什么.有没有人能够在迄今为止由SAS主导的"大数据"设置中使用Python?
编辑:购买更多硬件/内存当然可以提供帮助,但从IT角度来看,当Python(或R或MATLAB等)需要在内存中保存数据时,我很难将Python出售给需要分析大量数据集的组织.SAS继续在这里有一个强大的卖点,因为虽然基于磁盘的分析可能会更慢,但您可以放心地处理大量数据集.因此,我希望Stackoverflow可以帮助我弄清楚如何降低使用Python作为主流大数据分析语言的感知风险.