Как индексировать / разрезать последнее измерение тензора PyTorch / numpy массива неизвестных измерений - PullRequest
2 голосов
/ 26 февраля 2020

Например, если у меня есть 2D-тензор X, я могу сделать нарезку X [:, 1:]; если у меня есть 3D-тензор Y, то я могу выполнить аналогичное срезание для последнего измерения, например, Y [:,:, 1:].

Как правильно выполнять срезы, если для тензора Z задано неизвестное измерение? Как насчет массива numpy? 1003 *

Спасибо!

1 Ответ

2 голосов
/ 26 февраля 2020

Поддержка 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. Может присутствовать только один многоточие.
...