Ваш вопрос широк, но я постараюсь развеять некоторые мифы, чтобы вы начали.У меня есть только опыт работы с Python, поэтому мои примеры будут касаться только использования HDF5 с Python.
Панды или PyTables могут получать доступ к файлам HDF5, но, по-моему, они не позволяют хранить простые массивы NumPy.
Вы правы в том, что PyTables не позволяет сохранять простой массив NumPy без каких-либо дополнительных затрат.Но вам не нужно , чтобы использовать PyTables .h5py
предлагает NumPy-подобный интерфейс для хранения и доступа к массивам в / из файлов HDF5.
Сохранение массива NumPy
import h5py, numpy as np
arr = np.random.randint(0, 10, (1000, 1000))
f = h5py.File('file.h5', 'w', libver='latest') # use 'latest' for performance
dset = f.create_dataset('array', shape=(1000, 1000), data=arr, chunks=(100, 100)
compression='gzip', compression_opts=9)
Существуют варианты сжатия и разбиения на фрагменты, которые вы можете изучить дополнительно для оптимизации производительности чтения / записи и коэффициентов сжатия в соответствии с вашими требованиями.Однако обратите внимание, что gzip
является одним из немногих фильтров сжатия, которые поставляются со всеми установками HDF5.
Сохранение меток осей в качестве атрибутов
Атрибуты аналогичны наборам данныхи позволяет хранить широкий спектр данных, включая скаляры или массивы.
dset.attrs['Description'] = 'Some text snippet'
dset.attrs['X-Labels'] = np.arange(1000)
dset.attrs['Y-Labels'] = np.arange(1000)
Внутренне данные хранятся не в виде массивов NumPy, а в непрерывных блоках, чувствительных к типу данных, в соответствии со спецификацией HDF5.Таким образом, вы сможете читать эти файлы из любого API HDF5.
Стоит отметить, что существуют определенные требования для обеспечения переносимости строк, см. Строки в HDF5 из h5py
документы для более подробной информации.