【问题标题】:Can Flatbuffers take advantage of 0's in vectors? Or are other wavelets better than the Haar transform?Flatbuffers 可以利用向量中的 0 吗?还是其他小波比 Haar 变换更好?
【发布时间】:2020-04-29 03:47:47
【问题描述】:

我正在序列化一些数据,并希望在不丢失数据基本细节的情况下使文件大小尽可能小。对我来说,第一步是以二进制格式而不是 ASCII 格式保存数据,我决定尝试 Flatbuffers。以前,当数据存储为文本文件时,它们大约为 400 mb。使用下面显示的架构,该文件大约为 200 mb。所以这是一个很好的尺寸减小,但更小的当然会更好。数据由1个ControlParams,82个ControlData组成,强度向量占据了大部分空间,是一个大小约为128x5000的矩阵。我们已经达到了 128x5000*82 * 4 bytes per float ~ 200 mb 的理论二进制大小。矩阵通常非常密集,但在这里和那里我可以看到零行。 Flatbuffers 可以利用这些零值来进一步减小文件大小吗?也许有人可以在架构中发现其他低效率的地方,因为我刚刚开始使用 Flatbuffers?

另一种减小文件大小的方法可能是研究不同的小波来压缩原始强度。我现在正在使用 Haar 变换,因为我能够创建一个 C++ 函数来执行此操作,并且发现 2x 或可能 4x 的压缩是可能的。我可能想研究其他小波,但想知道其他人是否尝试过与 Haar 相比不同的小波,并发现他们能够使用更少的系数。

namespace RTSerialization;

table ControlParams{
    extractStepSizeDa:float = 1.0005;
    smooth:bool = false;
    haarLevel:int = 10;
    deltaTimeSec:float;
}

table ControlData{
    mzAxis:[float];
    timeSec:[float];
    intensities:[float];
    scanFilter:string;
}

table ControlParamsAndData{
    params:ControlParams;
    dataSet:[ControlData];
}

root_type ControlParamsAndData;

【问题讨论】:

    标签: c++ binary wavelet flatbuffers haar-wavelet


    【解决方案1】:

    是的,您的大小完全由单个 float 数组决定,FlatBuffer 格式的其余部分与如何使其更小的问题完全无关。

    不,FlatBuffers 不做任何形式的自动压缩,因为设计都是关于随机访问的。对浮点数组的任何访问都应该是 O(1)。

    因此,优化这些数据完全取决于您。你说数据是矩阵。矩阵中的浮点数通常在-1到1这样的有限范围内,所以可以量化为short

    当然,其他形式的压缩意味着您必须自己进行打包/拆包。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 2016-04-09
      • 2018-01-27
      • 2014-07-01
      • 2018-10-23
      • 2013-03-27
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多