平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
Can Flatbuffers take advantage of 0's in vectors? Or are other wavelets better than the Haar transform?
我正在序列化一些数据,并希望在不丢失数据基本细节的情况下使文件大小尽可能小。 对我来说,第一步是以二进制格式而不是ASCII保存数据,我决定尝试Flatbuffers。 以前,当数据存储为文本文件时,它们约为 400 MB。 使用下面显示的架构,文件约为 200 MB。 所以这是一个很好的尺寸减小,但越小当然会更好。 数据由 ControlParams 的 1 个、ControlData 的 82 个组成,强度矢量占据了大部分空间,是一个大小约为 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;
是的,您的大小完全由单个float
数组决定,FlatBuffer 格式的其余部分与如何使其更小的问题完全无关。
不,FlatBuffers不做任何形式的自动压缩,因为设计都是关于随机访问的。对浮点数组的任何访问都应该是 O(1(。
因此,优化这些数据完全取决于您。你说数据是矩阵。矩阵中的浮点数通常在有限的范围内,如 -1 到 1,所以可以量化为short
?
当然,其他形式的压缩意味着您必须自己打包/拆包。
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 如何在布局中与其他小部件一起安排Qcamera
- GTKMM/C 11:如何从其他小部件中创建自定义的复合小部件
- 多维离散小波变换
- 离散小波变换C++实现 - 运行时错误
- openCV中的小波变换
- 如何在QTreeWidget Header中添加按钮或其他小部件
- 寻找一个用于信号处理的良好的C/C++小波库
- Qt从其他小部件调用QMainWindow方法的最佳方式
- 放大Qt小部件,以便它可以覆盖其他小部件
- 如何在QT的其他小部件中调用创建的小部件对象
- 如何与其他小部件共享共享小部件指针
- C/ c++小波库,非gpl
- qglwidget如何与主窗口中的其他小部件交互
- 在堆栈上分配一个小对象比在堆上创建它(一次)更有效吗
- 清理Qt布局并添加其他小部件不起作用.幽灵小部件留下来.Qt错误
- 表示小波的数据结构
- 二维哈尔小波变换软阈值图像去噪(c++)
- 为什么int 1的最小值比正的值离零更远
- 创建大量Gtk小部件比在方法中传递上下文更好吗?