a[:,:,0] 和 a[:][:][0] 之间的差异

时间:2021-01-28 21:47:32

标签: python numpy pytorch

嗨,我正在学习 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] 究竟有什么不同?

1 个答案:

答案 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 一次

就您而言,这是张量在第三个轴上的第一个切片

相关问题