Перетасовка большого массива с отображенной памятью - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть массив измерений (20000000, 247) размером около 30 GB в файле .npy.У меня есть 32 GB доступной памяти.Мне нужно перетасовать данные вдоль строк.Я открыл файл в mmap_mode.Однако, если я попытаюсь что-то отличное от модификации на месте, например, np.random.permutation или создать массив индексов random.sampled p, а затем вернуть array[p], я получу MemoryError.Я также попытался перетасовать чанки, а затем попытаться сложить чанки, чтобы создать полный массив, но MemoryError.Единственное решение, которое я нашел до сих пор, это загрузить файл в mmap_mode = 'r+' и затем сделать np.random.shuffle.Тем не менее, это занимает вечность (прошло 5 часов, все еще перемешивается).

Текущий код:

import numpy as np
array = np.load('data.npy',mmap_mode='r+')
np.random.seed(1)
np.random.shuffle(array)

Есть ли более быстрый способ сделать это, не нарушая ограничения памяти?

...