我需要以某种方式在磁盘上存储一个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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top