如何索引/切片未知维度的 PyTorch 张量/numpy 数组的最后一个维度

Ton*_*ony 6 numpy pytorch tensor

例如,如果我有一个 2D 张量 X,我可以对 X[:,1:]; 进行切片。如果我有一个 3D 张量 Y,那么我可以对像 Y[:,:,1:] 这样的最后一个维度进行类似的切片。

当给定未知维度的张量 Z 时,进行切片的正确方法是什么?一个numpy数组怎么样?

谢谢!

Dis*_*ani 7

PyTorch 支持类似 NumPy 的索引,因此您可以使用Ellipsis( ...)

>>> z[..., -1:]
Run Code Online (Sandbox Code Playgroud)

示例

>>> x                     # (2,2) tensor
tensor([[0.5385, 0.9280],
        [0.8937, 0.0423]])
>>> x[..., -1:]
tensor([[0.9280],
        [0.0423]])
Run Code Online (Sandbox Code Playgroud)
>>> y                     # (2,2,2) tensor
tensor([[[0.5610, 0.8542],
         [0.2902, 0.2388]],

        [[0.2440, 0.1063],
         [0.7201, 0.1010]]])
>>> y[..., -1:]
tensor([[[0.8542],
         [0.2388]],

        [[0.1063],
         [0.1010]]])
Run Code Online (Sandbox Code Playgroud)
  • Ellipsis( ...) 扩展:为选择元组索引所有维度所需的对象数。在大多数情况下,这意味着扩展选择元组的长度为x.ndim. 可能只存在一个省略号。