我的情况是这样的:
我有大约 7000 万个整数值分布在大约 10 个数据类别的各个文件中(确切数量未知)
我读取了这几个文件,并用这些数据创建了一些 python 对象。这显然包括逐行读取每个文件并附加到 python 对象。因此,我将拥有一个包含 7000 万个子数组的数组,每个子数组有 10 个值。
我对这些数据做了一些统计处理。这将涉及将几个值(例如,百分位数排名)附加到数据的每“行”。
我将此对象存储在数据库中
现在我从未处理过这种规模的数据。我的第一反应是使用 Numpy 来提高内存数组的效率。但后来我听说在 Numpy 数组中,不鼓励使用“追加”,因为它效率不高。
那么你建议我选择什么?处理这种大小的数据有什么一般技巧吗?如果需要,我可以通过随机抽样将数据大小减少到 20%。
编辑:为了清楚地了解数据的大小和类型而进行编辑。
如果我正确理解您的描述,您的数据集将包含约 7 亿个整数。即使您使用 64 位整数,仍然只能达到 6GB 左右。根据您拥有多少 RAM 以及您想要在统计处理方面执行的操作,您的数据集听起来就像位于核心内存中的普通 numpy 数组一样易于管理。
如果数据集太大而无法放入内存,一个简单的解决方案可能是使用内存映射数组 ( numpy.memmap)。在大多数方面,np.memmap数组的行为类似于普通的 numpy 数组,但它不会将整个数据集存储在系统内存中,而是根据需要动态地从磁盘上的文件读取/写入到磁盘上的文件中。
另一种选择是将数据存储在 HDF5 文件中,例如使用PyTables或H5py。HDF5 允许在磁盘上压缩数据,PyTables 包含一些非常快速的方法来在基于磁盘的大型阵列上执行数学运算。
| 归档时间: |
|
| 查看次数: |
3938 次 |
| 最近记录: |