使用Python将数据压缩到例如12位块?

我有一种数据类型,输出为〜2800万个整数,范围从0到4095(从技术上讲,它来自硬件,是带符号的16位整数,范围从0到(1/2)* 2 ^ 16 ,但是这种表示方式是不必要的精确)。因此,原则上每个数据点的值都可以用12位表示(如果可以的话,一个字节和一个半字节)。从长远来看,我正在处理我打算以二进制形式存储的大量数据(两位数的兆字节),因此显然可以将其无损压缩到其大小的75%。

很明显,我可以编写一个函数,将我的数据编码为布尔值,然后使用Numpy的二进制处理函数进行解析。但是,我必须权衡这与存储和检索的简便性/速度之间的平衡。因此,我想知道是否有任何现有的程序包,算法等以简单有效的方式完成此任务。如果需要,我可以使用Fortran或C,因此可以选择在其中创建模块,但是如果我不需要,我的同事会更愿意。

cen12 回答:使用Python将数据压缩到例如12位块?

您尝试过gzip.compress()吗? https://docs.python.org/3/library/gzip.html

它不是专门用于您正在执行的特定任务,但是如果您有一系列字节那样简单的东西,其中比特的子集始终为零,那么我希望gzip处理一下以及专用的压缩算法,并且它具有通用格式的优点,而其他工具也不会出现读取问题。

,

能否将两个12位整数打包/位移到三个字节(24位)的数组中,然后使用位移来获得高12位和低12位?

我想这种编码在考虑到冗余性或者您的数据特别稀疏或以某种方式分配整数的情况下,除了可以节省编码所节省的空间之外,还可以很好地进行压缩。

我对numpy一无所知,但从粗略的外观来看,我相信它可以存储字节数组,并且Python中提供了移位操作数。如果需要性能,可以在Cython中研究Python中unsigned char *上基于C的位操作。

您需要弄清楚偏移量,以便始终使用正确的起始字节,或者使用“ frameshift mutation”之类的东西来使用生物学隐喻。对于TB大小的数据容器来说,这可能是个坏消息。

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

大家都在问