Python h5py - эффективный доступ к массивам рваных массивов - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть большой файл 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] с длинными массивами (обычно в сотнях миллионов).

Создание этих массивов работает хорошо, моя проблема связана с доступом.Если я хочу получить доступ к срезу из одного из массивов, например, d [0] [5000: 6000] или d [0] [50, 89, 100], использование памяти идет вверх, и я считаю, что оно читаетна больших участках массива;Я могу очень быстро наблюдать за увеличением физической памяти с 5-6 ГБ до 32 ГБ (объем оперативной памяти на машине).p = d [0] читает весь массив в память, поэтому я думаю, что это происходит, а затем индексирует его.

Есть ли лучший способ сделать это?Тип d [n] является массивом numpy, и я не могу взять его ссылку.Я подозреваю, что я мог бы реструктурировать данные так, чтобы у меня были группы для каждого из индексов, например, «0 / прогнозы», «1 / прогнозы», ..., но я бы предпочел не преобразовывать это, если есть разумныеальтернатива.

Спасибо, Мари

...