Вопрос

Мне нужно каким-либо образом хранить 512 ^ 3 на диск на диск, и в данный момент я использую HDF5. Поскольку массив редкий, много дискового пространства потрачено впустую.

HDF5 обеспечивает любую поддержку для редкого массива?

Это было полезно?

Решение

Обозначенные наборы данных (H5D_Chunked) Разрешить редкое хранение, но в зависимости от ваших данных накладные расходы могут быть важны.

Возьмите типичный массив и попробуйте как редкие, так и неподредоточные, а затем сравните размеры файлов, то вы увидите, если это действительно стоит.

Другие советы

Один обходной путь состоит в том, чтобы создать набор данных с compression вариант. Отказ Например, в Python с использованием H5PY.:

import h5py
f = h5py.File('my.h5', 'w')
d = f.create_dataset('a', dtype='f', shape=(512, 512, 512), fillvalue=-999.,
                     compression='gzip', compression_opts=9)
d[3, 4, 5] = 6
f.close()

Полученный файл составляет 4,5 кб. Без сжатия этот же файл будет около 512 МБ. Это сжатие 99,999%, потому что большинство данных -999. (или что-то другое fillvalue ты хочешь).


Эквивалент может быть достигнут с помощью API C ++ HDF5 путем настройки H5 :: DSETCREATPROPLIST :: SetDeflate до 9, с Пример показан в H5Group.cpp..

HDF5 предоставляет индексированное хранилище: http://www.hdfgroup.org/hdf5/doc/technotes/rawdstorage.html.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top