Flatbuffers是否可以利用向量中的0?还是其他小波比Haar变换更好?

我正在序列化一些数据,并希望在不丢失数据基本细节的情况下,使文件尽可能小。对我而言,第一步是将数据保存为二进制格式而不是ASCII,因此我决定尝试使用flatbuffers。以前,当数据存储为文本文件时,它们约为400 mb。使用以下所示的架构,文件约为200 mb。因此,这是一个不错的减小大小的方法,但是较小的值当然会更好。数据由1个ControlParams,82个ControlData组成,并且强度矢量占据了大部分空间,是一个大小约为128x5000的矩阵。我们已经达到理论上的二进制大小128x5000 * 82 *每个浮点数4个字节〜200 mb。一般而言,矩阵非常密集,但是在这里和那里我可以看到零行。 flatbuffers可以利用这些零来进一步减小文件大小吗?自从我刚开始使用flatbuffers以来,也许有人可以在模式中发现其他效率低下的问题?

另一种减小文件大小的方法可能是研究不同的小波以压缩原始强度。我之所以使用Haar变换,是因为我能够制作一个C ++函数来执行此操作,并且发现可以进行2倍或4倍的压缩。我可能想研究其他小波,但想知道与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;
a68434576 回答:Flatbuffers是否可以利用向量中的0?还是其他小波比Haar变换更好?

是的,您的大小完全由单个float数组确定,FlatBuffer格式的其余部分与如何减小它的大小完全无关。

不,FlatBuffers不执行任何形式的自动压缩,因为设计全部是关于随机访问的。对float数组的任何访问都应为O(1)。

因此,优化数据完全取决于您。您说数据是矩阵。.矩阵中的浮点数通常在-1到1之类的有限范围内,因此可以量化为short吗?

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

本文链接:https://www.f2er.com/2784374.html

大家都在问