У меня возникли проблемы с пониманием правил для широковещания массивов в Numpy.
Очевидно, что если вы выполняете умножение по элементам на двух массивах одинаковых размеров и формы, все в порядке. Кроме того, если вы умножаете многомерный массив на скаляр, он работает. Это я понимаю.
Но если у вас есть два N-мерных массива разных форм, мне непонятно, что такое правила вещания. В этой документации/учебнике объясняется, что: для трансляции размер конечных осей для обоих массивов в операции должен быть одинаковым размер или один из них должен быть одним.
Хорошо, поэтому я полагаю, что на задней оси они относятся к N
в массиве M x N
. Таким образом, это означает, что если я попытаюсь умножить два 2D-массива (матрицы) с равным числом столбцов, он должен работать? Кроме этого не...
>>> from numpy import *
>>> A = array([[1,2],[3,4]])
>>> B = array([[2,3],[4,6],[6,9],[8,12]])
>>> print(A)
[[1 2]
[3 4]]
>>> print(B)
[[ 2 3]
[ 4 6]
[ 6 9]
[ 8 12]]
>>>
>>> A * B
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Поскольку оба A
и B
имеют два столбца, я бы подумал, что это сработает. Поэтому я, вероятно, что-то не понимаю о терминах "конечная ось" и как это относится к N-мерным массивам.
Может кто-нибудь объяснить, почему мой пример не работает, и что подразумевается под "задней осью"?