我需要读取存储在内存映射文件中的巨大numpy数组的一部分,处理数据并为数组的另一部分重复。整个numpy阵列占用约50 GB,而我的机器具有8 GB的RAM。

我最初使用numpy.memmap创建了内存映射文件,方法是读取许多较小的文件并处理它们的数据,然后将处理后的数据写入memmap文件。在创建memmap文件的过程中,没有内存问题(我定期使用memmap.flush())。这是我创建内存映射文件的方式:

mmapData = np.memmap(mmapFile,mode='w+', shape=(large_no1,large_no2))
for i1 in np.arange(numFiles):
   auxData = load_data_from(file[i1])
   mmapData[i1,:] = auxData
   mmapData.flush() % Do this every 10 iterations or so

但是,当我尝试访问memmap文件的一小部分(
mmapData = np.memmap(mmapFile, mode='r',shape=(large_no1,large_no2))
aux1 = mmapData[5,1:1e7]

我认为使用mmap或numpy.memmap应该可以访问大规模数组的某些部分,而无需尝试将整个对象加载到内存中。我想念什么?

我是否使用错误的工具来访问磁盘中存储的大型numpy数组(大于20 GB)的一部分?

最佳答案

可能是您在查看虚拟内存消耗,而不是物理内存消耗,而速度下降是由其他原因引起的吗?

10-06 03:05