如何 index/slice PyTorch tensor/numpy 未知维度数组的最后一个维度

How to index/slice the last dimension of a PyTorch tensor/numpy array of unknown dimensions

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

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

谢谢!

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

>>> z[..., -1:]

例子:

>>> x                     # (2,2) tensor
tensor([[0.5385, 0.9280],
        [0.8937, 0.0423]])
>>> x[..., -1:]
tensor([[0.9280],
        [0.0423]])
>>> 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]]])
  • Ellipsis (...) 扩展为选择元组索引所有维度所需的 : 个对象数。在大多数情况下,这意味着扩展选择元组的长度为 x.ndim。可能只有一个省略号。