Быстрая загрузка небольшой части файла NPZ

#python #numpy

#python #numpy

Вопрос:

Мне нужно использовать файл .npz для проекта и при чтении его как такового:

 import matplotlib
matplotlib.use('Agg')
import numpy 
import random
import matplotlib.pyplot as plt
data = numpy.load('data.npz')

lst = data.files
 

никаких проблем не возникает. Однако, как только я добавлю что-то, что его использует, например

 subset = (data['arr_0'][1:100, :, :, :]
 

или произвольная выборка (поскольку она очень большая (180 000 x 5 x 10 x 10), и я хочу использовать только подмножество), для завершения требуется вечность.
Есть ли способ загрузить только первую часть или случайные выборки в разумные сроки?

Комментарии:

1. np.load из npy файла принимает mmap_mode параметр, который позволяет ему считывать фрагмент массива из файла, не загружая его целиком. Но это недоступно для npz файлов. npz это zip-архив. data это словарь, ссылающийся на этот архив. data['arr_0'] извлекает этот файл из архива и загружает его.

2. Сначала извлеките arr_0 файл из npz архива (например, с помощью инструмента zip-оболочки) и выполните load с mmap_mode помощью, что arr_0.npy может работать и быть быстрее.