迭代张量的最好、最快的方法是什么。令人困惑的是为什么我得到张量而不是值..
得到这个:
[ x for x in t]
Out[122]: [tensor(-0.12), tensor(-0.11), tensor(0.68), tensor(0.68), tensor(0.17)]
但预期会出现这种行为:
[ x for x in t.numpy() ]
Out[123]: [-0.11932722, -0.114598714, 0.67563725, 0.6756373, 0.16548502]
如果可能的话,我不想转换为 numpy ?
最佳答案
使用 numpy 一切都变得更简单,因为 np.arrays
只是始终存储在 CPU 上的数字集合。因此,如果您迭代 np.array
,您会得到这些float
数字。
然而,在 PyTorch 中,张量不仅存储数字,还存储它们的梯度。此外,PyTorch 张量可以存储在 CPU 或 GPU 上。因此,为了保留所有这些“辅助信息”,PyTorch 在迭代张量时返回单元素张量。
如果您坚持从张量中获取简单的“数字”,您可以使用 tensor.item()
:
[x.item() for x in t]
或者,tensor.tolist()
:
t.tolist()
有关 numpy np.array
和 torch.tensor
之间差异的更多信息,请参阅 this answer .
关于python - 迭代 torch 张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73725148/