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

将PyTorch bfloat16张量转NumPy数组触发TypeError,求解决方法

PyTorch bfloat16张量转NumPy数组的替代方案

直接调用x.numpy()或np.array(x)转换PyTorch的bfloat16张量会触发TypeError,核心原因是NumPy原生不支持bfloat16数据类型。以下是两种可行的替代方案:

方案1:转成NumPy兼容的浮点类型再转换

先将bfloat16张量转换为float32或float64(这两种类型是NumPy完全支持的),再调用numpy()方法:

import torch
import numpy as np

x = torch.Tensor([0]).to(torch.bfloat16)
# 转换为float32后转NumPy(无精度损失)
x_np = x.to(torch.float32).numpy()
# 或者转换为float64
x_np = x.to(torch.float64).numpy()

这种方法简单高效,适合绝大多数日常场景,精度损失可以忽略(bfloat16转float32不会丢失有效精度,转float64仅扩展存储位数)。

方案2:保留原始bfloat16字节数据

如果需要保留bfloat16的原始二进制存储(比如用于二进制文件读写、跨框架数据传输),可以先将张量转为字节数组,再用NumPy解析为uint16类型(对应bfloat16的16位存储):

import torch
import numpy as np

x = torch.Tensor([0]).to(torch.bfloat16)
# 将bfloat16张量转为uint8字节数组
x_bytes = x.cpu().contiguous().view(torch.uint8).numpy()
# 重新解释为uint16,对应bfloat16的原始二进制值
x_bf16_raw = x_bytes.view(np.uint16)

后续如果需要恢复为bfloat16张量,只需将uint16数组转回字节,再用PyTorch重新解析即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:23:20