У меня возникли проблемы с пониманием правил трансляции массивов в 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 "", line 1, in
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Поскольку и A
, и B
имеют два столбца, я думал, что это сработает. Итак, я, вероятно, что-то неправильно понимаю в термине «конечная ось» и в том, как он применяется к N-мерным массивам.
Кто-нибудь может объяснить, почему мой пример не работает, и что подразумевается под «скользящей осью»?