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

如何零拷贝获取Numpy数组原始字节并拼接为bytearray用于HTTP请求

多Numpy数组零拷贝字节拼接实现方案

你可以直接利用Numpy数组原生支持的Python缓冲区协议,搭配预分配的bytearray做零拷贝写入,完全跳过tobytes()产生临时bytes对象的额外开销。原有的getbuffer()方法废弃后,Numpy已经将缓冲区协议的支持直接集成到了ndarray对象的底层实现中,不需要调用任何额外方法即可直接被Python的缓冲区相关接口识别使用。

实现代码如下:

import numpy as np

list_arr = [np.array([1, 2, 3]), np.array([4, 5, 6])]
total_nb_bytes = sum(a.nbytes for a in list_arr)
# 预分配足够容量的bytearray,仅做一次内存申请
cb = bytearray(total_nb_bytes)

offset = 0
for arr in list_arr:
    # 直接通过缓冲区协议写入对应位置,无中间数据拷贝
    cb[offset:offset + arr.nbytes] = arr
    offset += arr.nbytes

补充说明

  • 该方案全程没有产生任何中间临时bytes对象,所有数组数据直接从Numpy的原始内存地址写入目标bytearray,相比tobytes()实现可以降低大量内存开销和拷贝耗时。
  • 若后续需要从拼接后的字节还原Numpy数组,你需要提前记录每个数组的dtype、shape、字节长度等元信息,避免解码时出现数据错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:39:01