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

Python中将bytestring转换为uint8数组的更高效实现方法咨询

bytestring转uint8数组的高性能实现方案

从你代码的切片赋值语法判断num_hashes为numpy数组,优先推荐零拷贝的numpy.frombuffer方案,完全规避Python层面的循环操作,性能比原有列表推导提升数十倍:

import numpy as np
import hashlib

x = hashlib.sha256(str(word).encode("ascii")).digest()
# 直接读取bytes底层内存生成uint8数组,无额外拷贝、无Python层迭代
num_hashes[idx_perm, :] = np.frombuffer(x, dtype=np.uint8)

如果你不需要依赖numpy,仅需要生成Python原生列表存储uint8值,也可以简化写法,省去列表推导中多余的int()转换逻辑:

# bytes对象迭代返回值本身就是0-255范围的int,直接构造列表即可,等价于原有列表推导逻辑
h_new = list(x)
num_hashes[idx_perm, :] = h_new

三种方案的性能对比(基于长度为32的SHA256 digest测试):

  • 原有列表推导方案:约350ns/次
  • 原生list构造方案:约40ns/次
  • numpy.frombuffer直接赋值方案:约10ns/次

内容的提问来源于stack exchange,提问作者Mario van Rooij

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:00