python - 使用非常大的数组 - Numpy

标签 python numpy

我的情况是这样的:

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

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

  3. 我对该数据进行一些统计处理。这将涉及将几个值(例如,百分位数排名)附加到每个“行”数据。

  4. 我将这个对象存储在数据库中

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

那么你建议我搭配什么?使用这种大小的数据有什么一般技巧吗?如果需要,我可以通过随机抽样将数据减少到其大小的 20%。

编辑:编辑以明确数据的大小和类型。

最佳答案

如果我正确理解您的描述,您的数据集将包含约 7 亿个整数。即使您使用 64 位整数,它仍然只有 6GB 左右。根据您拥有的 RAM 量以及您希望在统计处理方面执行的操作,您的数据集听起来就像一个位于核心内存中的普通 numpy 数组一样易于管理。


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

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

关于python - 使用非常大的数组 - Numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399120/

相关文章:

python - 在 python 中读取 v 7.3 mat 文件

python - 修改 numpy 数组中的值

python - 如何使 scipy.interpolate 给出超出输入范围的推断结果?

python - Gunicorn Django 线程

python - python 对象的可读名称作为字典键

python - 如何在pyspark数据框中将groupby转换为reducebykey?

python - 微阵列层次聚类和 PCA 与 python

python - mpi4py 分散和收集大型 numpy 数组

python - Numpy:在 3 维中使用 np.mean

python - Pandas:带有两个条形图和两个 y 轴的条形图