我的情况是这样的:
我有大约 7000 万个整数值分布在各种文件中,用于 ~10 类数据(具体数字未知)
我阅读了那几个文件,并用这些数据创建了一些 python 对象。这显然包括逐行读取每个文件并附加到 python 对象。所以我将有一个包含 7000 万个子数组的数组,每个子数组有 10 个值。
我对该数据进行一些统计处理。这将涉及将几个值(例如,百分位数排名)附加到每个“行”数据。
我将这个对象存储在数据库中
现在我从未处理过这种规模的数据。我的第一直觉是使用 Numpy 来获得更高效的数组 w.r.t 内存。但后来我听说在 Numpy 数组中,不鼓励使用“追加”,因为它效率不高。
那么你建议我搭配什么?使用这种大小的数据有什么一般技巧吗?如果需要,我可以通过随机抽样将数据减少到其大小的 20%。
编辑:编辑以明确数据的大小和类型。
最佳答案
如果我正确理解您的描述,您的数据集将包含约 7 亿个整数。即使您使用 64 位整数,它仍然只有 6GB 左右。根据您拥有的 RAM 量以及您希望在统计处理方面执行的操作,您的数据集听起来就像一个位于核心内存中的普通 numpy 数组一样易于管理。
如果数据集太大而无法放入内存,一个简单的解决方案可能是使用内存映射数组 (numpy.memmap
)。在大多数方面,np.memmap
数组的行为类似于普通的 numpy 数组,但不是将整个数据集存储在系统内存中,而是根据需要动态读取/写入磁盘上的文件。
另一种选择是将数据存储在 HDF5 文件中,例如使用 PyTables或 H5py . HDF5 允许在磁盘上压缩数据,而 PyTables 包括一些非常快速的方法来对基于磁盘的大型阵列执行数学运算。
关于python - 使用非常大的数组 - Numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399120/