Правила вещания массива Numpy

У меня возникли проблемы с пониманием правил трансляции массивов в 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-мерным массивам.

Кто-нибудь может объяснить, почему мой пример не работает, и что подразумевается под «скользящей осью»?

20
задан ali_m 29 November 2015 в 18:00
поделиться