使用Python限制内存中适合的数据量,以及当数据不适合内存时如何处理?

时间:2014-05-20 08:48:19

标签: python-2.7 memory-management numpy

我想进行测试,如果我有500 MB的数据集,我想只读取100 MB的数据。这只是一个例子。一般来说,如果我的数据集大小为x,我希望能够只读取x / k的数量。

数据采用numpy数组的形式。代码流将是:

data = pickle.load(open('test.data', 'rb'))
nrows = data.shape[0]
ncols = data.shape[1]
sketch = np.zeros((k, ncols) #k << n
for item in data:
    Do Something

我想在数据不适合内存时模拟流模型。流模型是指您只有一次数据传递。

当python不适合内存时,它如何处理数据集。例如,如果我的ram是4gb且上面的pickle数据是40GB,那么会发生什么

1 个答案:

答案 0 :(得分:0)

由于我同意他们,我将合并来自@HYRY和@ali_m的评论:如果你的数据不能适应内存,那么最简单的方法就是“脱离核心”。这意味着数据在磁盘上,但软件层允许您与它进行交互,就像在内存中一样。 numpy内置了一个解决方案:memory mapping。另一个非常好的包是pytables。第一个将数据存储为二进制文件,numpy位于文件顶部而不是RAM块之上。然后,您可以使用数据执行任何操作,包括跨阵列的操作。另一个需要一个HDF5文件,并且支持一些核心外的操作,它们非常快速,并且还有一些还原操作,但是你更有限。另一方面,HDF5是一种非常流行的格式,可以从许多其他语言访问,所以这是一个非常好的选择。