apoyo matriz dispersa en HDF5
-
30-09-2019 - |
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?
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