У меня возникли проблемы с пониманием правил для широковещания массивов в Numpy.Правила вещания в массиве Numpy
Очевидно, что если вы выполняете умножение по элементам на двух массивах одинаковых размеров и формы, все в порядке. Кроме того, если вы умножаете многомерный массив на скаляр, он работает. Это я понимаю.
Но если у вас есть два N-мерных массива разные формы, мне непонятно, в чем именно действуют правила вещания. В этом documentation/tutorial объясняется, что: Для трансляции размер задних осей для обоих массивов в операции должен быть одного размера или один из них должен быть одним.
Итак, я полагаю, на задней оси они имеют в виду 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-мерным массивам.
Может кто-нибудь объяснить, почему мой пример не работает, и что подразумевается под «задней осью»?
Это поистине хорошее объяснение - вещание, http://www.scipy.org/EricsBroadcastingDoc –
Вы не могли бы помешать тегу "broadcasting" please? – denis
Ссылка на комментарий @BiRico теперь http://wiki.scipy.org/EricsBroadcastingDoc Интересно, почему он был перемещен в * архивный свалку *. – iled