我需要以某种方式在磁盘上存储 512^3 阵列,并且我目前正在使用 HDF5。由于阵列稀疏,大量磁盘空间被浪费。
HDF5 是否提供对稀疏数组的支持?
一种解决方法是使用以下内容创建数据集compression option http://docs.h5py.org/en/latest/high/dataset.html#dataset-compression。例如,在 Python 中使用h5py http://www.h5py.org/:
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 https://support.hdfgroup.org/HDF5/doc/cpplus_RM/class_h5_1_1_d_set_creat_prop_list.html#afce63c8d8c410e4a52b25b469fea1859到 9,有一个示例显示在h5group.cpp https://support.hdfgroup.org/HDF5/doc/cpplus_RM/h5group_8cpp-example.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)