4.6 其他过滤器
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论