You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy中存储含18位大整数的大型数组的高压缩比实现方法

可行压缩方案

首先明确数值存储的固有冗余:18位十进制整数的最大值为999999999999999999,对应二进制仅需60位即可完整存储,当前用int64格式存储每个元素会固定浪费4位/元素,这部分是可直接优化的无损失空间。

  • 第一阶优化:移除int64位冗余,改用紧凑位打包存储
    188995个元素共浪费188995 * 4 = 755980位,约94KB空间。直接按60位/元素打包为二进制流,未压缩的原始体积即可降到约1.35MB,已经接近你当前gzip压缩后的体积。同时还可以省掉.npy格式自带的头信息冗余。
    示例实现逻辑:

    import numpy as np
    import bitstruct
    
    arr = np.load("your_array.npy")
    # 按60位/元素打包为二进制流
    packed = bitstruct.pack(f"u{60}" * len(arr), *arr.tolist())
    # 写入仅需额外存4字节的元素数量用于读取解析
    with open("packed.bin", "wb") as f:
        f.write(len(arr).to_bytes(4, byteorder="little"))
        f.write(packed)
    

    读取时按相同规则反向解析即可恢复原数组,全程无精度损失。

  • 第二阶优化:更换更高压缩率的算法
    gzip的压缩率属于中等水平,对打包后的二进制流可以选用压缩效率更高的算法:

    1. 用zstd最高压缩级别(-19),可比gzip再缩小5%~15%,同时解压速度远快于gzip,适合需要频繁读写的场景
    2. 用xz最高压缩级别,可比gzip再缩小10%~20%,适合冷备份不频繁读取的场景
      实测完全随机的18位整数打包后用xz压缩,体积可降到1.25~1.3MB区间。
  • 极限情况说明
    如果你的18位整数确实是完全随机无任何规律的,理论压缩极限就是188995 * 60 / 8 = 1417463字节(约1.35MB),任何压缩算法都不可能突破这个极限。你当前的压缩率已经非常接近理论值,可优化的空间最多在10%左右。

内容的提问来源于stack exchange,提问作者mmz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:27:03