使用非常大的数组Numpy

2024-09-27 00:19:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我的情况是这样的:

  1. 我有大约7000万个整数值分布在不同的文件中,用于~10类数据(确切数字未知)

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

  3. 我对这些数据做了一些统计处理。这将涉及到向每一行数据附加几个值(比如,百分位排名)。

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

我从来没有用过这种规模的数据。我的第一反应是使用Numpy来创建更高效的数组w.r.t内存。但后来我听说在Numpy数组中,“append”是不可取的,因为它没有效率。在

那你觉得我该怎么办?对于处理这种大小的数据有什么一般的提示吗?如果需要的话,我可以通过随机抽样将数据降到其大小的20%。在

编辑:为了明确数据的大小和类型而编辑。在


Tags: 文件数据对象内存numpy数据库编辑情况
1条回答
网友
1楼 · 发布于 2024-09-27 00:19:43

如果我正确理解您的描述,您的数据集将包含大约7亿个整数。即使使用64位int,也只能达到6GB左右。根据你有多少内存以及你想在统计处理方面做什么,你的数据集听起来像是一个生活在核心内存中的普通numpy数组,是相当容易管理的。在


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

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

相关问题 更多 >

    热门问题