有人推荐一种适合双精度浮点值的好压缩算法吗?我们发现,对于常用的压缩程序(如Zip、RAR、7-Zip等),浮点值的二进制表示导致压缩率很低。
我们需要压缩的数据是一个8字节值的一维数组,按单调递增的顺序排序。这个数值代表开尔文的温度,跨度通常在100度以下。值的数目从几百到最多64K不等。
Clarifications
更新
找到了一篇关于这个主题的有趣文章。不确定这种方法是否适用于我的需求。
发布于 2010-02-10 19:35:15
首先要考虑的是:在将数据转换为双精度之前,尝试压缩数据。这是你对大卫桑利的评论,除非你的红外成像模数转换器有24位重要位,32位浮点数应该有足够的精度;只有你的要求,才能准确地保留后续处理产生的噪音才是个问题。否则,通过确定它生成的值表并存储到此表的索引,逆向工程您的处理可能是可行的。
第二:如果您的压缩算法知道您的数据是8字节块,那么它将更加有效;这是因为它不会将最重要的字节抛到最小的字节中。作为一种粗略的预处理方法,您可以尝试用一个独特的字节(可能是ASCII逗号?)对每个双字节进行前缀。在通过像gzip这样的基于字节的压缩器之前,这应该会导致更好的总体压缩,即使中间流要大12%。较少粗糙,但更多的努力是编写自己的压缩适应这个任务--也许使用8层树来表示双字节中每个字节的期望值。
第三:由于图像数据高度冗余,某种形式的增量编码或其他与图像相关的压缩应该节省一些空间。然而,如果你要求无损压缩,它不会给你带来很大的收益,因为图像噪声本身是不可压缩的。此外,正如上面所解释的,它不会帮助您处理双倍中不太重要的部分中的伪随机散列。
发布于 2010-03-28 22:51:14
您列出的所有编码器都是面向字节的,并被一些双倍属性抛出。首先是12位指数/符号不能很好地处理字节边界的布局,另一种是输入的噪音。第一部分是容易处理的多种方式,第二部分将限制任何无损压缩的有效性,你扔在它上。我认为即使是最好的结果也不会那么令人惊讶,我不知道你的数据,但我怀疑你可以指望只节省25%,或多或少。
从我的头上看,也许没有用,因为你想过这份清单上的一切.
第二种想法是,简单地对真值进行XORing预测比差异更好,因为您不需要那么做第3步。
你的数据有一点是好的,它是单调的。你的数据有一件坏事:它太小了。你想存多少钱,只有千字节?干什么用?For what?如果相邻值之间经常存在指数差异,则压缩效果会受到很大影响。
如果您正在处理大量的这些数据集,您应该考虑使用它们的相似性来更好地将它们压缩在一起--也许在某个阶段将它们交织在一起。如果您可以忍受一些损失,那么将一些最不重要的字节归零可能是个好主意--可能是对源数据和预测都是如此,这样您就不会在那里重新引入噪音了。
发布于 2013-12-31 08:39:20
如果你想要高压缩的档案存储,Burtscher & Patanaworabhan的“双精度浮点数据的高通量压缩”或Lindstrom & Isenberg的“浮点数据的快速Effi压缩”可能对您有帮助。
如果您想要更快的动态访问,而代价是较低的压缩率,那么一维提升小波可能是合适的。通过指定要保留的数字数,可以将数据量化为较小的整数。然后使用增量编码和预测模型,然后用Haar变换或代价更高的小波变换和系数大于指定值的算术编码。
希望它能帮上忙
您可以在这里得到Lindstrom的ZFP算法:https://github.com/LLNL/zfp
https://stackoverflow.com/questions/2238754
复制相似问题