Python字典pop未返回PyTorch Tensor,如何获取Tensor类型值?
问题:torch字典pop返回标量而非Tensor类型的原因及解决办法
问题代码及输出
代码
import torch mydict = {"state0": torch.tensor(12345.6), "state1":torch.tensor(23456.7)} print(f"mydict: {mydict}") val = mydict.pop("state0") print(f"val={val}")
运行输出
mydict: {'state0': tensor(12345.5996), 'state1': tensor(23456.6992)} val=12345.599609375
用户疑问
为何调用pop("state0")未返回tensor(12345.5996),而是返回了标量?我需要获取Tensor类型的返回值。
解答
这是f-string格式化输出导致的视觉误解:pop方法已经正确返回了Tensor对象,只是f-string在处理{val}时,自动调用了Tensor的__float__()方法,将其转换成Python标量进行显示。
验证方法
添加一行代码打印val的类型,就能确认它确实是Tensor:
print(type(val)) # 输出:<class 'torch.Tensor'>
显示Tensor格式的两种方法
如果想要在打印时看到Tensor的完整形式,有两种简单方式:
- 直接单独打印
val:print(val),会输出tensor(12345.5996) - 在f-string中把
val转为字符串:print(f"val={str(val)}"),同样会显示Tensor格式
修改后的示例代码
import torch mydict = {"state0": torch.tensor(12345.6), "state1":torch.tensor(23456.7)} print(f"mydict: {mydict}") val = mydict.pop("state0") print(f"val的类型: {type(val)}") print(f"val以Tensor格式显示: {str(val)}") print("直接打印val:", val)
修改后输出
mydict: {'state0': tensor(12345.5996), 'state1': tensor(23456.6992)} val的类型: <class 'torch.Tensor'> val以Tensor格式显示: tensor(12345.5996) 直接打印val: tensor(12345.5996)
内容的提问来源于stack exchange,提问作者silence_lamb
相关产品推荐
相关产品推荐

