嗨,我正在学习 Python 切片,我发现了一些奇怪的东西,我不明白
import torch
a = torch.tensor([
[
[1, 2, 3],
[4, 5, 6]
],
[
[7, 2, 3],
[8, 5, 6]
]
])
>>> a[:][:][0]
tensor([[1, 2, 3],
[4, 5, 6]])
>>> a[:,:,0]
tensor([[1, 4],
[7, 8]])
我试图从对应的torch list中拉出[[1,4,7,8]],所以我输入了[:][:][0],结果是[[1,2, 3], [4,5,6]]。
然后,当我输入a[:,:,0]时,出现[[1,4,7,8]]。
我以为他们没有什么不同,但出现了不同的结果。
torch 和 numpy 操作符,有一个像 a[:,0] 这样的操作。它与 a[:][0] 究竟有什么不同?
答案 0 :(得分:1)
您可以将第一个 a[:][:][0]
视为对 __getitem__
的多个链接调用。这意味着 a[:][:][0]
大致相当于:
b = a[:]
c = b[:]
d = c[0]
其中 d
是结果。在您的情况下,它返回与 a[0]
相同的内容,因为 a[:] == a
。
相比之下,a[:,:,0]
只会使用参数 __getitem__
调用 slice(None), slice(None), 0
一次。
就您而言,这是张量在第三个轴上的第一个切片。