Python h5py - эффективный доступ к массивам рваных массивов
У меня есть большой файл h5py с несколькими рваными массивами в большом наборе данных. Массивы имеют один из следующих типов:
# Create types of lists of variable length vectors
vardoub = h5py.special_dtype(vlen=np.dtype('double'))
varint = h5py.special_dtype(vlen=np.dtype('int8'))
Внутри группы HDF5 (grp) я создаю наборы данных из N зубчатых элементов, например:
d = grp.create_dataset("predictions", (N,), dtype=vardoub)
и заполнить d[0], d[1], ..., d[N-1] длинными массивами numpy (обычно в сотнях миллионов).
Создание этих массивов работает хорошо, моя проблема связана с доступом. Если я хочу получить доступ к срезу из одного из массивов, например, d[0][5000:6000] или d[0][50, 89, 100], использование памяти идет вверх, и я считаю, что оно читает на больших участках массива; Я могу очень быстро наблюдать за увеличением физической памяти с 5-6 ГБ до 32 ГБ (объем оперативной памяти на машине). p = d[0] считывает весь массив в память, так что я думаю, что это происходит, а затем индексирует его.
Есть лучший способ сделать это? Тип d[n] является массивом numpy, и я не могу взять его ссылку. Я подозреваю, что я мог бы реструктурировать данные так, чтобы у меня были группы для каждого из индексов, например, "0/ прогнозы", "1/ прогнозы",..., но я бы предпочел не преобразовывать это, если есть разумные альтернатива.
Спасибо Мари