为什么即使所有数据集都压缩在文件中,压缩 HDF5 文件仍能获得大量压缩?

Why zipping HDF5 file is still getting a good amount of compression even if all datasets are compressed inside the file?

我在桌面应用程序中使用 HDF5 文件系统。我对文件中的所有数据集使用了 GZIP 5 级压缩。

但仍然当我使用 7zip 压缩 HDF5 文件时,文件大小变得更小了大约一半到三分之一!!!

我遵循的过程是:

  1. 正在生成 HDF5 文件。
  2. 正在导入文件中的数据。
  3. 使用 h5repack 实用程序释放下落不明的 space,如果有的话。
  4. 我使用 7zip 将文件压缩为 .zip

怎么可能?

压缩的范围在哪里?

如何生成更小的HDF5文件?关于使用 属性(H5P).

的任何建议

我认为 7zip 可能会使用 GZIP 级别 9 无情地压缩我的文件,但我尝试在我的 HDF5 文件中使用 GZIP 级别 9。新文件大小仍然是原来的一半。

gzip 的最大压缩比约为 1000:1。如果数据比这更可压缩,那么您可以第二次压缩它以获得更多压缩(第二次可以再次 gzip)。你可以用一个只包含零的文件做一个简单的实验:

% dd ibs=1 count=1000000 < /dev/zero > zeros
% wc -c zeros
1000000
% gzip < zeros | wc -c
1003
% gzip < zeros | gzip | wc -c
64

那么你第一次压缩的压缩比是多少?

您仅对 HDF5 文件中的数据集元素应用压缩。 HDF5 文件的其他组件(内部元数据和组等对象)未压缩。因此,当您压缩整个文件时,其他组件也会压缩,并且已经压缩的数据集元素也可以压缩更多。