У меня есть массив измерений (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)
Есть ли более быстрый способ сделать это, не нарушая ограничения памяти?