Python 了解numpy memmap的性能

Python 了解numpy memmap的性能,python,performance,numpy,Python,Performance,Numpy,我试图更好地理解numpy的memmap如何处理超大文件的视图。下面的脚本打开内存映射的2048^3数组,并复制该数组的下采样128^3视图 import numpy as np from time import time FILE = '/Volumes/BlackBox/test.dat' array = np.memmap(FILE, mode='r', shape=(2048,2048,2048), dtype=np.float64) t = time() for i in rang

我试图更好地理解numpy的memmap如何处理超大文件的视图。下面的脚本打开内存映射的2048^3数组,并复制该数组的下采样128^3视图

import numpy as np
from time import time

FILE = '/Volumes/BlackBox/test.dat'
array = np.memmap(FILE, mode='r', shape=(2048,2048,2048), dtype=np.float64)

t = time()
for i in range(5):
    view = np.array(array[::16, ::16, ::16])
t = ((time() - t) / 5) * 1000
print "Time (ms): %i" % t
通常,这会打印
时间(ms):80左右。但是,如果我将视图指定更改为

view = np.array(array[1::16, 2::16, 3::16])
运行三次,我得到以下结果:

Time (ms): 9988
Time (ms): 79
Time (ms): 78

有人知道为什么第一次调用会慢得多吗?

操作系统仍将映射文件的部分(或全部)缓存在物理RAM中。初始读取必须访问磁盘,这比访问RAM慢得多。做足够多的其他磁盘IO,您会发现您将回到原来的时间,操作系统必须重新读取未从磁盘缓存的位…

请注意,在最快的维度中,1的移位将导致32MB的移位,这就足够了,你的读取来自一组不相交的页面。谢谢你的解释-我没有意识到操作系统可以像这样缓存结果