Pregunta

necesito para almacenar una matriz 512 ^ 3 en el disco de alguna manera y actualmente estoy usando HDF5. Dado que la matriz es escasa una gran cantidad de espacio en disco se desperdicia.

¿El HDF5 proporcionar cualquier apoyo a matriz dispersa?

¿Fue útil?

Solución

fragmentada conjuntos de datos (H5D_CHUNKED) permitir el almacenamiento escaso pero dependiendo de sus datos, la sobrecarga puede ser importante.

Tome una matriz típica y tratar tanto escasa y no escasa y luego comparar los tamaños de archivo, entonces se verá si es realmente vale la pena.

Otros consejos

Una solución es crear el conjunto de datos con una opción de compression . Por ejemplo, en Python usando 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()

El archivo resultante es de 4,5 kb. Sin compresión, este mismo archivo sería de alrededor de 512 MB. Eso es una compresión de 99,999%, porque la mayoría de los datos son -999. (o lo que sea fillvalue desea).


El equivalente puede lograrse mediante la API de C ++ HDF5 configurando H5: : DSetCreatPropList :: setDeflate a 9, con un ejemplo se muestra en la h5group.cpp .

HDF5 proporciona almacenamiento indexado: http://www.hdfgroup.org/HDF5 /doc/TechNotes/RawDStorage.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top