HDF5中的稀疏阵列支持

and*_*ini 14 sparse-array hdf5 sparse-matrix

我需要以某种方式在磁盘上存储512 ^ 3阵列,我目前正在使用HDF5.由于阵列稀疏,因此浪费了大量磁盘空间.

HDF5是否为稀疏阵列提供任何支持?

Mik*_*e T 16

一种解决方法是使用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()
Run Code Online (Sandbox Code Playgroud)

生成的文件为4.5 KB.没有压缩,这个相同的文件大约是512 MB.这是99.999%的压缩,因为大多数数据都是-999.(或任何fillvalue你想要的).


通过将H5 :: DSetCreatPropList :: setDeflate设置为9,可以使用C++ HDF5 API实现等效,其示例显示在h5group.cpp中.


Sim*_*mon 3

分块数据集 (H5D_CHUNKED) 允许稀疏存储,但根据您的数据,开销可能很重要。

采取一个典型的数组,尝试稀疏和非稀疏,然后比较文件大小,然后你就会知道它是否真的值得。