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

Спасибо Мари

0 ответов

Другие вопросы по тегам