You need to enable JavaScript to run this app. 如何在Python中自定义13位int类型用于numpy数组存储以节省内存
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中自定义13位int类型用于numpy数组存储以节省内存

NumPy自定义13位整数类型实现方案

NumPy本身没有原生支持的13位整数类型,你可以根据使用场景选择以下两种可落地的实现方案:

方案1:位打包存储(优先推荐)

这种方案适合仅需要在RAM中紧凑存储数据、运算前将需要的片段转回int16处理的场景,兼容性最好,不会出现NumPy运算不支持的问题。

注意:使用前需要确认所有数据都落在13位有符号整数的取值范围 -4096 ~ 4095 内,避免溢出。

实现代码示例:

import numpy as np

# 定义数组参数
shape = (290000, 513, 126)
element_cnt = np.prod(shape)
# 计算总占用字节数,向上取整
total_bytes = (element_cnt * 13 + 7) // 8

# 初始化紧凑存储的uint8数组,按字节存储位数据
packed_dataset = np.zeros(total_bytes, dtype=np.uint8)

# 单元素写入函数
def write_13bit(packed_arr, idx, val):
    # 先转换为13位无符号表示
    val = val & 0x1fff
    bit_pos = idx * 13
    byte_pos = bit_pos // 8
    offset = bit_pos % 8
    # 写入当前字节
    packed_arr[byte_pos] = (packed_arr[byte_pos] & (~(0xff << offset))) | (val << offset)
    remaining = 13 - (8 - offset)
    if remaining > 0:
        packed_arr[byte_pos+1] = (packed_arr[byte_pos+1] & (~(0xff >> (8 - remaining)))) | (val >> (8 - offset))
    if remaining > 8:
        remaining -= 8
        packed_arr[byte_pos+2] = (packed_arr[byte_pos+2] & (~(0xff >> (8 - remaining)))) | (val >> (16 - offset))

# 单元素读取函数
def read_13bit(packed_arr, idx):
    bit_pos = idx * 13
    byte_pos = bit_pos // 8
    offset = bit_pos % 8
    val = packed_arr[byte_pos] >> offset
    val |= packed_arr[byte_pos+1] << (8 - offset)
    if 13 > (8 - offset):
        val |= packed_arr[byte_pos+2] << (16 - offset)
    val = val & 0x1fff
    # 转回有符号整数
    return val - 0x2000 if val >= 0x1000 else val

如果需要批量读写,可以基于NumPy的packbits/unpackbits做向量化优化,速度远高于单元素循环读写。该方案存储总大小约为28.4GB,比用int16存储节省约18.75%的内存。

方案2:自定义NumPy dtype

如果你的场景需要直接在13位整数数组上执行NumPy常规运算,可以通过NumPy自定义dtype接口实现,但该方案兼容性极差,绝大多数第三方NumPy生态库都不支持自定义dtype,且运算速度远低于原生类型,非必要不推荐。
简化实现思路如下:

  • 底层可以选择用int16做存储,额外加取值范围校验,实现成本低但不节省内存
  • 如果要实现紧凑存储,需要重写完整的类型转换、位运算、广播等接口,实现复杂度极高

低成本折中方案

如果可以接受少量额外内存占用,还有更简单的选择:直接用np.int16存储,配合np.memmap做内存映射,将不需要参与运算的部分放在磁盘上,仅加载需要的片段到RAM中,实现成本极低,兼容性100%,可以根据你的实际运算逻辑判断是否适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:15:03