У меня есть огромный список массивов, в частности 113287
, где каждый массив имеет форму 36 x 2048
.С точки зрения памяти это составляет 32 гигабайта .
. На данный момент я сериализовал эти массивы как гигантский файл HDF5.Теперь проблема в том, что извлечение отдельных массивов из этого файла hdf5 занимает мучительно много времени (к северу от 10 минут) для каждого доступа.
Как я могу ускорить это?Это очень важно для моей реализации, так как я должен индексировать в этот список несколько тысяч раз для подачи в глубокие нейронные сети.
Вот как я индексирую в файл hdf5:
In [1]: import h5py
In [2]: hf = h5py.File('train_ids.hdf5', 'r')
In [5]: list(hf.keys())[0]
Out[5]: 'img_feats'
In [6]: group_key = list(hf.keys())[0]
In [7]: hf[group_key]
Out[7]: <HDF5 dataset "img_feats": shape (113287, 36, 2048), type "<f4">
# this is where it takes very very long time
In [8]: list(hf[group_key])[-1].shape
Out[8]: (36, 2048)
Есть идеи, где я могу ускорить процесс?Есть ли какой-либо другой способ сериализации этих массивов для более быстрого доступа?
Примечание: я использую список Python, так как я хочу, чтобы порядок был сохранен (то есть, чтобы получить в том же порядке, в котором я его разместил, когда ясоздал файл hdf5)