返回介绍

4.6 其他过滤器

发布于 2024-01-25 22:02:55 字数 1756 浏览 0 评论 0 收藏 0

HDF5还用到了一些特别的过滤器,比如一致性校验过滤器和重排(SHUFFLE)过滤器,来提升压缩性能。这些过滤器,以及你指定的任何压缩过滤器,都被HDF5组装进过滤器流水线一一运行。

4.6.1 SHUFFLE过滤器

这个过滤器只会和GZIP或LZF等压缩过滤器同时使用。它利用了这样一个事实:对于很多数据集来说,大多数信息都出现在数据的少数几个字节上。比如,如果你有一个4字节无符号整型数据集,而你的数据都是一些0到几千的值,大多数数据只用到了低位的2个字节。数据集里前三个整数看上去可能是这样的(big-endian格式):

SHUFFLE过滤器将数据重新分块打包,让所有整数的第一个字节保存在一起,然后是所有整数的第二个字节。这样重复下去,你最终得到了一个这样的分块:

GZIP和LZF等基于字典的压缩器在压缩大量相同的值时效率特别高,比如来自这个数据集里整数的前两个字节的所有0值。压缩来自第三个字节的重复元素时效率也有一定的提升。只有第四个字节看上去确实难以压缩。

如下语句可以打开SHUFFLE过滤器(和GZIP同时使用):

查看数据集是否打开SHUFFLE:

SHUFFLE压缩器的特点:

所有HDF5发行版可用;

超快(重排时间相比于压缩时间可以忽略);

仅可与GZIP或LZF等过滤器共同使用。

4.6.2 FLETCHER32过滤器

世事无绝对。当你在存储或转换一个好几个TB的数据集时,你会希望你放进文件的字节跟你读出来的是一样的。HDF5为此提供了一个校验和过滤器。它使用了弗莱彻校验的一个32位实现,因此被命名为FLETCHER32。

每个分块被写入文件时都会计算一个校验和保存在分块的元数据中。当分块被读取时,再次计算校验和并比对。如果不匹配,会抛出一个错误,读取失败。

下面是在新建数据集时打开校验和的方法:

查看一个数据集的校验和是否打开:

FLETCHER32过滤器的特点:

所有HDF5发行版可用;

很快;

兼容所有无损过滤器。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文