【发布时间】:2011-04-02 12:01:28
【问题描述】:
我需要以某种方式在磁盘上存储一个 512^3 数组,我目前正在使用 HDF5。由于阵列稀疏,因此浪费了大量磁盘空间。
HDF5 是否支持稀疏数组?
【问题讨论】:
-
[这个答案][1] 提供了一个(仅限 Python)解决方案。 [1]:stackoverflow.com/a/22589030/2858145
标签: sparse-matrix hdf5 sparse-array
我需要以某种方式在磁盘上存储一个 512^3 数组,我目前正在使用 HDF5。由于阵列稀疏,因此浪费了大量磁盘空间。
HDF5 是否支持稀疏数组?
【问题讨论】:
标签: sparse-matrix hdf5 sparse-array
一种解决方法是使用compression option 创建数据集。例如,在 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 和 example shown in h5group.cpp 来实现等效。
【讨论】:
分块数据集 (H5D_CHUNKED) 允许稀疏存储,但根据您的数据,开销可能很重要。
取一个典型的数组,尝试稀疏和非稀疏,然后比较文件大小,然后你会看到它是否真的值得。
【讨论】:
【讨论】: