【发布时间】:2015-07-14 23:36:36
【问题描述】:
我有一个包含 1100x1600 数据点的二维矩阵。最初,我将它存储在一个 ascii 文件中,我使用命令对其进行了 tar 压缩
tar -cvzf ascii_file.tar.gz ascii_file
现在,我想切换到 hdf5 文件,但它们太大了,至少在我使用它们的方式上……首先,我使用 c 过程将数组写入 hdf5 文件
H5Fcreate, H5Screate_simple, H5Dcreate, H5Dwrite
按这个顺序。 hdf文件里面的数据没有压缩,比较大,所以我用命令压缩了
h5repack --filter=GZIP=9 hdf5_file hdf5_file.gzipped
不幸的是,这个带有压缩内容的 hdf 文件仍然比压缩的 ascii 文件大 5 倍,见下表:
file size
--------------------------
ascii_file 5721600
ascii_file.tar.gz 287408
hdf5_file 7042144
hdf5_file.gzipped 1117033
现在我的问题是:为什么压缩后的 ascii 文件要小得多,有没有办法使 hdf 文件更小?
谢谢。
【问题讨论】:
-
读取random
manpage 表明h5repack不仅压缩 数据,还保留对象布局,以便快速检索。普通的 ZIPping 不会这样做。 -
嗯,我想我只是预计这不会产生如此巨大的差异。此外,我刚刚发现使用
--filter=SHUF选项有助于将大小减小到730156。仍然是 2.5 倍。还有其他的cmets吗? -
ASCII 文件中的每个点可能只有几位数字,而 HDF5 为每个数字存储一个数据类型,可能是双精度数,具体取决于您的编写方式。这肯定会占用更多空间。
-
@MarkAdler 这似乎是个好点,我没有想过这个