繁体   English   中英

如何在 Python 中按升序压缩递增的整数序列

[英]How to compress increasing sequences of integers in ascending order in Python

我有一个 2D 列表,里面有大约 150 万个列表,每个列表存储一个递增的唯一正整数序列,范围从 0 到 450K。 这个二维列表中总共存储了大约 2.1B 个数字。 列表长度的分布如图所示。 我将经常按行访问此列表。 有没有什么好的压缩解压方法? Python 中是否有任何现有的实现可以做到这一点? 在此处输入图像描述

首先,您可以使用array为每个 integer 使用四个字节。 对于存储在 Python 中的 memory 中的阵列,这将导致显着压缩——超过三倍。

其次,您可以将值打包成 19 位整数,因为这是表示 0..450000 所需的最小值。 另一个因子 1.7。

第三,您可以使用算术编码,其中下一个符号的概率是最后一个符号后面剩余整数数量的一倍。 假设列表长度为 1400,这将使每个 integer 平均从 19 位下降到大约 10 位。另一个因素是 1.9。

第四,您可以使用算术编码,其中下一个符号的概率取决于符号,对最后一个 integer 上方的整数的直方图进行归一化。 该因素取决于直方图的不平衡。

您可以搜索进行算术编码的 Python 包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM