You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:15:08