numpy数组的内存映射文件

Kar*_*Man 6 memory numpy large-files large-data

我需要读取存储在内存映射文件中的巨大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
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试访问memmap文件的小部分(<10 MB)时,它会在创建memmap对象时泛滥我的整个ram.机器急剧减速,我无能为力.以下是我尝试从内存映射文件中读取数据的方法:

mmapData = np.memmap(mmapFile, mode='r',shape=(large_no1,large_no2))
aux1 = mmapData[5,1:1e7]
Run Code Online (Sandbox Code Playgroud)

我认为使用mmap或numpy.memmap应该允许我访问大量数组的部分而不试图将整个内容加载到内存中.我错过了什么?

我是否使用错误的工具访问存储在磁盘中的大型numpy阵列(> 20 GB)的部分?

And*_*ner 1

您是否正在考虑虚拟内存消耗,而不是物理内存消耗,并且速度减慢是由于其他原因造成的?