如何 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
。可能只有一个省略号。
例如,如果我有一个二维张量 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
。可能只有一个省略号。