将极小浮点数列表转为PyTorch张量时触发TypeError问题求助
解决极小浮点数列表转PyTorch张量的TypeError问题
问题场景
需要将包含极小浮点数的列表ydata = [1.39e-11, 1.5e-12, 4.7e-16]转换为PyTorch张量,调用torch.FloatTensor(ydata)时触发错误:TypeError('must be real number, not str'),但检查列表元素类型均为float。
解决方案
- 再次确认元素类型:执行
print([type(x) for x in ydata])输出每个元素的类型,确保没有混入字符串类型。部分数据来源(如文件读取)可能会将数字以字符串形式存入列表,肉眼难以直接分辨。 - 使用
torch.tensor()替代旧API:PyTorch官方推荐使用更灵活的torch.tensor(),它能自动推断输入的数值类型,对极小浮点数的兼容性更好:import torch ydata = [1.39e-11, 1.5e-12, 4.7e-16] y_tensor = torch.tensor(ydata) print(y_tensor) - 显式指定数据类型:若仍有问题,可明确指定
dtype,比如用torch.float32或torch.float64避免精度相关的隐式转换错误:y_tensor = torch.tensor(ydata, dtype=torch.float64) - 清洗数据来源:如果数据是从外部文件(CSV/JSON等)读取的,确保读取时完成类型转换。例如处理读取到的字符串型数字列表:
# 示例:转换字符串型数字列表为float列表 ydata_str = ["1.39e-11", "1.5e-12", "4.7e-16"] ydata = [float(item) for item in ydata_str] y_tensor = torch.tensor(ydata)
内容的提问来源于stack exchange,提问作者TonyR
相关产品推荐
相关产品推荐

