PyTorch代码报错TypeError:仅单元素整数张量可转为索引求解决
解决PyTorch张量与列表乘法的TypeError问题
错误原因
原代码尝试将PyTorch张量(k0*n_inc)与Python列表直接相乘,PyTorch的张量运算不支持这种操作——它会错误地将列表当作索引处理,从而抛出TypeError: only integer tensors of a single element can be converted to an index。
修复方案
只需将Python列表转换为PyTorch张量,即可实现原生PyTorch运算,以下是两种常用方式:
方式1:用torch.tensor()包裹列表
import torch n_inc = torch.tensor(1) theta = torch.tensor(0.6109) phi = torch.tensor(0) k0 = torch.tensor(6.2832) kinc = k0 * n_inc * torch.tensor([ torch.sin(theta)*torch.cos(phi), torch.sin(theta)*torch.sin(phi), torch.cos(theta) ]) print(kinc)
方式2:用torch.stack()堆叠张量(更高效)
直接将三个计算得到的张量堆叠成新张量,避免额外类型转换开销:
import torch n_inc = torch.tensor(1) theta = torch.tensor(0.6109) phi = torch.tensor(0) k0 = torch.tensor(6.2832) k_components = torch.stack([ torch.sin(theta)*torch.cos(phi), torch.sin(theta)*torch.sin(phi), torch.cos(theta) ]) kinc = k0 * n_inc * k_components print(kinc)
两种方式均会输出正确结果:
tensor([3.6276, 0.0000, 5.0715])
内容的提问来源于stack exchange,提问作者galib
相关产品推荐
相关产品推荐

