使用非常大的数组 - Numpy

时间:2014-08-20 07:32:07

标签: python numpy

我的情况是这样的:

  1. 我有大约7000万个整数值分布在各种文件中~10类数据(具体数字未知)

  2. 我读了那些文件,并用这些数据创建了一些python对象。这显然包括逐行读取每个文件并附加到python对象。所以我将有一个70 mil子阵列的阵列,每个子阵列有10个值。

  3. 我对这些数据进行了一些统计处理。这将涉及向每个“行”数据附加几个值(例如,百分等级)。

  4. 我将此对象存储在数据库

  5. 现在我从未使用过这种规模的数据。我的第一直觉是使用Numpy来获得更高效的数组w.r.t内存。但后来我听说在Numpy阵列中,“追加”是不鼓励的,因为它不那么有效。

    那么你建议我选择什么?处理此大小数据的一般提示?如果需要的话,我可以通过随机抽样将数据降低到其大小的20%。

    编辑:编辑以了解数据的大小和类型。

1 个答案:

答案 0 :(得分:3)

如果我正确理解您的描述,您的数据集将包含约7亿个整数。即使您使用64位整数,仍然只会达到约6GB。根据您拥有的RAM数量以及您在统计处理方面的目标,您的数据集听起来像是一个非常容易管理的生活在核心内存中的正常numpy数组。


如果数据集太大而无法放入内存,一个简单的解决方案可能是使用内存映射数组(numpy.memmap)。在大多数方面,np.memmap数组的行为类似于普通的numpy数组,但不是将整个数据集存储在系统内存中,而是根据需要动态地从磁盘上读取/写入文件。

另一种选择是将数据存储在HDF5文件中,例如使用PyTablesH5py。 HDF5允许数据在磁盘上压缩,PyTables包含一些非常快速的方法,可以在基于磁盘的大型阵列上执行数学运算。