Код: Выделить всё
A = np.memmap(filename, dtype='float32', mode='r', shape=(3000000,162))
Код: Выделить всё
p = some_permutation_of_0_to_2999999()
Код: Выделить всё
start = 0
end = 3000000
num_rows_to_load_at_once = some_size_that_will_fit_in_memory()
while start < end:
indices_to_access = p[start:start+num_rows_to_load_at_once]
do_stuff_with(A[indices_to_access, :])
start = min(end, start+num_rows_to_load_at_once)
Есть ли какой-нибудь способ заставить np.memmap использовать определенный объем памяти? (Я знаю, что мне не понадобится больше строк, чем я планирую прочитать за раз, и что кэширование мне не поможет, поскольку я обращаюсь к каждой строке ровно один раз)
Может быть, вместо этого есть какой-то другой способ перебора (например, генератора) по массиву np в произвольном порядке? Я мог бы написать это вручную, используя file.seek, но это происходит намного медленнее, чем реализация np.memmap.
do_stuff_with() не сохраняет никаких ссылок на получаемый массив, поэтому в этом аспекте нет «утечек памяти».
спасибо
Подробнее здесь: https://stackoverflow.com/questions/451 ... erate-once
Мобильная версия