Я пытаюсь создать очень большие файлы .npy, и у меня возникают некоторые трудности. Например, мне нужно создать матрицу (500, 1586, 2048, 3) и сохранить ее в файл npy. И желательно поместить его в файл npz_compressed. Мне также нужно, чтобы это было эффективным с точки зрения памяти для работы в системах с низким объемом памяти. Я пробовал несколько методов, но пока ни один из них не работает. Я столько раз писал и переписывал что-то, что у меня нет фрагментов кода для всего, но я опишу методы как можно лучше с фрагментами кода, где могу. Также приносим извинения за плохое форматирование.
- Создайте ndarray со всеми моими данными в нем, затем используйте savez_compressed для его экспорта.
Все мои данные будут помещены в массив , но это ужасно для эффективности памяти. Я заполнил все 8 ГБ ОЗУ плюс 5 ГБ пространства подкачки. Я получил его, чтобы сохранить свой файл, но он не масштабируется, так как моя матрица может значительно увеличиться.
Используйте «np.memmap ('file_name_to_create', mode = 'w +', shape = (500,1586,2048,3))», чтобы создать большой начальный файл npy, затем добавьте мои данные.
Этот метод работал для получения моих данных, и он довольно эффективно использует память. Однако я больше не могу использовать np.load для открытия файла (получать ошибки, связанные с pickle, независимо от того, имеет ли значение allow_pickle значение true или false), что означает, что я не могу поместить его в сжатый. Я был бы доволен этим форматом, если бы смог перевести его в сжатый формат, но я просто не могу понять. Я стараюсь по возможности избегать использования gzip.
Создайте массив (1,1,1,1) нулей и сохраните его с помощью np.save. Затем попробуйте открыть его с помощью np.memmap с тем же размером, что и раньше.
При этом возникают те же проблемы, что и в методе 2. Больше нельзя использовать np.load для его последующего чтения
Создайте 5 [100, ...] файлов npy методом 1 и сохраните их с помощью np.save. Затем прочтите 2 с помощью np.load (mmap_mode = 'r +'), а затем объедините их в 1 большой файл npy.
Создание отдельных файлов npy неплохо для памяти, может быть, от 1 ГБ до 1,5 gb. Однако я не мог понять, как затем объединить файлы npy без фактической загрузки всего файла npy в ОЗУ. Я читал в другом stackoverflow, что файлы npy вообще не предназначены для этого. Они упомянули, что для такого «добавления» было бы лучше использовать файл .h5.
Это основные методы, которые я использовал. Я ищу отзывы о том, сработает ли какой-либо из этих методов, какой из них будет работать «лучше всего» для эффективности памяти, и, возможно, некоторые рекомендации по тому, как заставить этот метод работать. Я также не был бы против перехода на .h5, если бы это был лучший метод, я просто еще не пробовал его.