Numpy 1D массивы обрабатываются как векторы столбцов, когда речь идет о вещании - PullRequest
1 голос
/ 17 февраля 2020

В документации по правилам вещания указано, что два измерения совместимы, если либо:

  • они равны, либо
  • одно из них 1

Это становится понятным с некоторыми из приведенных примеров, таких как:

A      (4d array):  8 x 1 x 6 x 1
B      (3d array):      7 x 1 x 5
Result (4d array):  8 x 7 x 6 x 5

Это кажется достаточно ясным. Тем не менее, я не смог найти конкретный c пример / объяснение того, почему 1D-массивы могут транслироваться только с 2d-массивами, когда форма 1d-массива совместима с формой второй оси 2d-массива. Так, например:

np.ones((2,3)) * np.arange(3)

array([[0., 1., 2.],
       [0., 1., 2.]])

1-й диапазон транслируется по строкам, как и ожидалось. Однако, если мы сделаем:

np.ones((3, 2)) * np.arange(3)

ValueError: операнды не могут быть переданы вместе с фигурами (3,2) (3,)

Мы получаем ошибку для несовместимые формы. Это может быть довольно просто, но я просто хочу знать, какова правильная интерпретация. Причиной этого является то, что когда речь идет о правилах трансляции, массивы 1d рассматриваются как векторы столбцов, и, следовательно, совместимость форм проверяется вдоль второй оси массива 2d? А для больших массивов всегда ли проверяется последняя ось на большем ndarray?

1 Ответ

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

Является ли причиной этого то, что когда речь идет о правилах вещания, массивы 1d рассматриваются как векторы столбцов, и, следовательно, совместимость форм проверяется вдоль второй оси массива 2d?

Напротив, они рассматриваются как векторы строк и располагаются вертикально. Вы можете увидеть это в этой фигуре из соответствующей статьи.

Вы можете сделать тот же эскиз в представленном вами случае:

A   3 x 2    # np.ones((3, 2))
B   2 x 3    # np.ones((2, 3))
C       3    # np.arange(3)

Здесь A*C делает не работает, но B*C работает. Это потому, что C дублируется по первому измерению (т. Е. По строкам). Вы можете представить недостающие размеры как «измененные», дублируя размеры после

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...