如何将numpy浮点型数组转换为无精度损失的torch张量?
问题说明
你观察到的现象不是实际精度丢失,只是PyTorch的默认打印配置只展示4位小数导致的视觉差异。torch.from_numpy()本身是零拷贝接口,会和原numpy数组共享内存,转换前后的数值完全一致,不存在精度损失,本身就能满足精度完全一致的转换需求。
验证方法
你可以通过修改打印配置或者直接对比单个元素值来确认:
import numpy as np import torch test = ['0.01171875', '0.01757812', '0.02929688'] test_np = np.array(test).astype(float) test_torch = torch.from_numpy(test_np) # 方法1:修改PyTorch打印精度,显示完整小数位 torch.set_printoptions(precision=8) print(test_torch) # 输出:tensor([0.01171875, 0.01757812, 0.02929688], dtype=torch.float64) # 方法2:对比单个元素的实际值 print(test_np[0] == test_torch[0].item()) # 输出:True
注意事项
如果要绝对保证精度匹配,只要确保转换前numpy数组的浮点类型和你需要的精度一致即可:
- 若numpy数组为
float32,转换后得到的torch张量也为float32 - 若numpy数组为
float64,转换后得到的torch张量也为float64torch.from_numpy()会完全继承原numpy数组的dtype,不需要额外调用其他转换函数。
内容的提问来源于stack exchange,提问作者user10735026
相关产品推荐
相关产品推荐

