您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:读取12位二进制文??件

Python:读取12位二进制文??件

我的实现与@ max9111提出的实现略有不同,该实现不需要调用unpackbits

它通过将中间字节切成两半并使用numpy的二进制运算,直接uint12从三个连续的值中创建两个值uint8。在下文中,data_chunks假定它是一个二进制字符串,其中包含任意数目的12位整数的信息(因此,其长度必须为3的倍数)。

def read_uint12(data_chunk):
    data = np.frombuffer(data_chunk, dtype=np.uint8)
    fst_uint8, mid_uint8, lst_uint8 = np.reshape(data, (data.shape[0] // 3, 3)).astype(np.uint16).T
    fst_uint12 = (fst_uint8 << 4) + (mid_uint8 >> 4)
    snd_uint12 = ((mid_uint8 % 16) << 8) + lst_uint8
    return np.reshape(np.concatenate((fst_uint12[:, None], snd_uint12[:, None]), axis=1), 2 * fst_uint12.shape[0])

我以其他实现作为基准,这种方法在?5 Mb输入下被证明快了约4倍:read_uint12_unpackbits每个循环65.5 ms±1.11 ms(平均±标准偏差,运行7次,每个循环10个循环),每个read_uint1214 ms±513 µs循环(平均±标准偏差,共运行7次,每个循环100次)

python 2022/1/1 18:27:50 有194人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶