compression - 为什么即使所有数据集都压缩在文件中,压缩 HDF5 文件仍能获得大量压缩?
问题描述
我在我的桌面应用程序中使用 HDF5 文件系统。我对文件中的所有数据集都使用了 GZIP 5 级压缩。
但是当我使用 7zip 压缩 HDF5 文件时,文件大小变得更小了大约一半到三分之一!
我遵循的过程是:
- 生成 HDF5 文件。
- 在文件中导入数据。
- 使用 h5repack 实用程序释放未计入的空间(如果有)。
- 使用 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
那么你第一次压缩的压缩比是多少?
推荐阅读
- php - 数据库在 PHP Codeigniter 中返回一个空的 Array()
- c# - 无法在 MVC 5 中检查授权和使用会话超时
- javascript - 尝试使用 Function 对象使用尾递归
- javascript - 有没有办法使用 Three.js 将 3D 模型导出为 PNG 图像
- shell - 有没有一种方法可以让我在另一台服务器上使用 shell 脚本访问、使用和操作来自一台服务器的文件>
- firebase - 如何优化每次应用启动时的 Firestore 读取
- python - 在 python 中安装任何包时出错:HTTPError: 404 Client Error: Not Found for url
- mysql - MySQL/MariaDB 更新计数器组按
- protocol-buffers - 从 protobuf 生成的 Java 类有编译错误
- c# - linq:如何检查一个属性的值是否存在