TypeError: only integer tensors of a single element can be converted to an indexValueError: only one

1.ValueError: only one element tensors can be converted to Python scalars

2.TypeError: only integer tensors of a single element can be converted to an index

这个两个报错很有意思,是一对亲兄弟,都发生在列表转化为tensor的过程中。

让我们好好分析一下,看完下面代码,你就会明白only one element tensors can be converted to Python scalars或者另外一个报错是什么意思了。

a=[]
b=torch.tensor([1])
a.append(b)
a.append(b)
print(a)

在这里插入图片描述
显然,a是一个列表,我们想将其转化为一个tensor。注意到,列表的元素就是一个个的单元素tensor,即错误中的one element tensors

torch.tensor(a)

成功!
在这里插入图片描述


分割线

上面似乎平平无奇,再看下面这一段代码,吓汝一跳。

a=[]
b=torch.tensor([1,2],dtype=torch.float32)
a.append(b)
a.append(b)
print(a)

在这里插入图片描述
同样,我们想要把这个列表转化为tensor。

torch.tensor(a)

在这里插入图片描述
是不是感觉很无语,上面都可以转化成功,这里却不可以。这下你明白了only one element tensorsonly的含义了吧。
不会吧,还没吓到你?那就再吓汝一跳!看招:

a=[]
b=torch.tensor([1,2],dtype=torch.int32)
a.append(b)
a.append(b)
print(a)

在这里插入图片描述
显然,上述是一个列表,我们还是想要将其转化为tensor。

torch.tensor(a)

又报错了,这下体验到only的作用了吧!
在这里插入图片描述

解决

这个问题的命根子就在与列表中的元素是一个一个的tensor,所以我们从这里入手。

a=[]
b=torch.tensor([1,2],dtype=torch.int32)
a.append(b)
a.append(b)
print(a)
a=[aa.tolist() for aa in a]#列表中元素由tensor变成列表。
print(torch.tensor(a))

在这里插入图片描述
可以看到把列表中元素由tensor变成列表,这是最致命的一击,把命根子斩断了!问题就解决了。

附录

上面是较为特殊的相互转换,一般地相互转换见list,numpy,tensor之间相互转换的方法
在这里插入图片描述


完结撒花
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值