numpy阵列的内存映射文件

numpy阵列的内存映射文件,numpy,memory,large-files,large-data,Numpy,Memory,Large Files,Large Data,我需要读入存储在内存映射文件中的巨大numpy数组的一部分,处理数据,并对数组的另一部分重复。整个numpy阵列大约占用50GB,我的机器有8GB的RAM 我最初使用numpy.memmap创建内存映射文件,方法是读入许多较小的文件并处理它们的数据,然后将处理后的数据写入memmap文件。在创建memmap文件期间,我没有内存问题(我定期使用memmap.flush()。下面是创建内存映射文件的方法: mmapData = np.memmap(mmapFile,mode='w+', shape=

我需要读入存储在内存映射文件中的巨大numpy数组的一部分,处理数据,并对数组的另一部分重复。整个numpy阵列大约占用50GB,我的机器有8GB的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
mmapData = np.memmap(mmapFile, mode='r',shape=(large_no1,large_no2))
aux1 = mmapData[5,1:1e7]

然而,当我尝试访问存储在磁盘中的小部分(20 GB)时?

是否您正在查看虚拟内存而不是物理内存消耗,而速度的下降是由其他原因造成的?

我还没有复制它,但这似乎也让我感到惊讶。我以为切片只是肥肉指针。。。您确定执行没有通过aux1分配吗?如果它超过了赋值,并且您正在读取,那么由于缓存线大于5字节(通常为64字节),将加载比预期更多的内存,这取决于您使用的是order='C'还是'F'。但这仍然不足以支持一台具有8GB可用RAM的机器,所以这不是一个答案。