В документации по правилам вещания указано, что два измерения совместимы, если либо:
- они равны, либо
- одно из них 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?