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

numpy浮点数组转torch.tensor时不合理不一致舍入问题问询

问题原因解析

你观察到的“转换时舍入不一致”是显示规则差异+浮点精度固有特性共同导致的,并非numpy转torch的过程中发生了额外舍入:

  • float64双精度浮点数无法精确表示所有十进制小数,你示例中的0.99995、5.99995、555555.99995在内存中存储的实际值本身就和十进制字面量存在微小偏差,部分略大于标称值、部分略小于标称值
  • numpy和pytorch的默认打印输出精度规则不同,才会出现你看到的显示层面的舍入差异,实际转换前后的内存值完全一致
验证方法

你可以通过修改打印配置输出更高精度的数值,确认转换过程没有修改原始值:

import numpy as np
import torch

# 统一设置20位小数打印精度
np.set_printoptions(precision=20)
torch.set_printoptions(precision=20)

np_array1 = np.array([0.99995])
print(np_array1)
print(torch.tensor(np_array1))
# 此时可以看到两者输出的实际值完全相同
解决方案

根据你的使用场景可以选择对应方案:

  • 如果仅需要消除显示层面的不一致:统一numpy和pytorch的打印精度即可
    # 示例:统一保留4位小数显示
    np.set_printoptions(precision=4)
    torch.set_printoptions(precision=4)
    
  • 如果需要完全避免浮点精度导致的数值偏差:可以将原始值按需要的精度放大为整数后再做转换,运算完成后再缩放回原量级
    # 示例:需要保留5位小数,先乘1e5转int64
    precision = 5
    scale = 10 ** precision
    np_array = np.array([0.99995 * scale], dtype=np.int64)
    torch_tensor = torch.tensor(np_array)
    # 后续运算完成后再除以scale恢复原值
    

注意:PyTorch本身不支持十进制高精度类型,如果业务对精度要求极高,无法接受浮点误差,只能基于整数类型做缩放运算。

内容的提问来源于stack exchange,提问作者Živa Urbančič

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:00