【问题标题】:HDF gzip compression vs. ASCII gzip compressionHDF gzip 压缩与 ASCII gzip 压缩
【发布时间】: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 man page 表明h5repack 不仅压缩 数据,还保留对象布局,以便快速检索。普通的 ZIPping 不会这样做。
  • 嗯,我想我只是预计这不会产生如此巨大的差异。此外,我刚刚发现使用--filter=SHUF 选项有助于将大小减小到730156。仍然是 2.5 倍。还有其他的cmets吗?
  • ASCII 文件中的每个点可能只有几位数字,而 HDF5 为每个数字存储一个数据类型,可能是双精度数,具体取决于您的编写方式。这肯定会占用更多空间。
  • @MarkAdler 这似乎是个好点,我没有想过这个

标签: c gzip hdf5


【解决方案1】:

好吧,在阅读Mark Adler's 评论后,我意识到这个问题有点愚蠢:在 ascii 情况下,值在一定位数后被截断,而在 hdf 情况下,“真实”值(“真实" = 存储我正在使用的数据类型的任何精度)。

然而,有一种方法可以进一步减小我的 hdf 文件的大小:通过使用选项应用 shuffle 过滤器

--filter=SHUF

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 2015-09-19
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多