Numpy Необычный вопрос об указании массива c и его окончательной формы? - PullRequest
1 голос
/ 11 января 2020
X = np.arange(12).reshape((3, 4)) => shape (3,4)
row = np.array([0, 1, 2])
row[:, np.newaxis] => shape (3,1)

X[row[:, np.newaxis], :]  => shape (3,1,4)

Кто-нибудь может объяснить, как происходит эта окончательная форма, когда согласно «правилам вещания» формы передаваемых индексов должны быть окончательной формой?

1 Ответ

0 голосов
/ 11 января 2020
  • X[i, :] дает i-ю строку X в виде массива формы (X.shape[1],)

  • X[[i], :] дает i-ю строку X как массив формы (1, X.shape[1])

  • X[[[i]], :] дает i-ю строку X как массив формы (1, 1, X.shape[1])

  • X[[[[i]]], :] дает i-ую строку X в виде массива формы (1, 1, 1, X.shape[1])

  • ...

Как видите, таким образом вы просто вводите дополнительные измерения, а форма выходного массива - это форма индексного массива + форма строки X.

Теперь, row[:, np.newaxis] равен array([[0], [1], [2]]) и имеет форму (3,1), а каждый ряд X имеет форму (4,). Так X[[[0], [1], [2]], :] возвращает три строки X, упакованные в массив формы (3,1) + (4,) = (3, 1, 4).

...