HDF5中的稀疏阵列支撑
-
30-09-2019 - |
题
我需要以某种方式在磁盘上存储一个512^3数组,目前我正在使用HDF5。由于阵列稀疏,很多磁盘空间都浪费了。
HDF5是否为稀疏阵列提供任何支持?
解决方案
块的数据集(H5D_CHUNKED)允许稀疏存储,但根据您的数据,开销可能很重要。
进行一个典型的数组,尝试稀疏和非SPARSE,然后比较文件大小,然后您将查看是否真的值得。
其他提示
一个解决方法是用一个 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 kb。没有压缩,同一文件将约为512 MB。这是99.999%的压缩,因为大多数数据是 -999.
(管他呢 fillvalue
你要)。
通过设置C ++ HDF5 API可以实现等效物 H5 :: DSetCreatProplist :: SetDeflate 到9, 显示的示例 H5Group.CPP.
不隶属于 StackOverflow