Tôi đang cố gắng hiểu rõ hơn cách bản ghi nhớ của numpy xử lý các lượt xem các tệp rất lớn. Kịch bản dưới đây sẽ mở ra một bộ nhớ ánh xạ 2048^3 mảng, và các bản sao một downsampled 128^3 điểm của nóHiểu hiệu suất của bản ghi nhớ cục bộ
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
Thông thường, đây in Time (ms): 80
hoặc lâu hơn. Tuy nhiên, nếu tôi thay đổi sự phân công nhằm
view = np.array(array[1::16, 2::16, 3::16])
và chạy nó ba lần, tôi nhận được như sau:
Time (ms): 9988
Time (ms): 79
Time (ms): 78
Có ai hiểu tại sao gọi đầu tiên là quá chậm hơn?
Lưu ý rằng một sự thay đổi của 1 trong kích thước được kéo dài nhất sẽ dẫn đến một sự thay đổi 32MB, mà sẽ là đủ mà đọc của bạn đến từ một tập hợp các trang. – ecatmur
Cảm ơn bạn đã giải thích - Tôi đã không nhận ra rằng hệ điều hành có thể lưu trữ kết quả như thế này – ChrisB