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

时间:2018-08-20 13:26:09

标签: compression hdf5 h5py pytables hdf

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

但是仍然当我使用7zip压缩HDF5文件时,文件大小甚至减小了一半到三分之一 !!!

我正在遵循的过程是:

  1. 生成HDF5文件。
  2. 在文件中导入数据。
  3. 使用h5repack实用程序释放未占用的空间(如果有)。
  4. 使用7zip,我将文件压缩为.zip

怎么可能?

更多压缩的范围在哪里?

如何生成更小的HDF5文件?有关使用属性(H5P)的任何建议。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您仅将压缩应用于HDF5文件中的数据集元素。 HDF5文件的其他组件(内部元数据和对象,例如组)未压缩。因此,当压缩整个文件时,其他那些组件也会压缩,而已经压缩的数据集元素也可能会压缩更多。