У меня есть большой файл 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 / прогнозы», ..., но я бы предпочел не преобразовывать это, если есть разумныеальтернатива.
Спасибо, Мари