[Numpy-discussion] For broadcasting, can m by n by k matrix be multiplied with n by k matrix?

Andras Deak deak.andris at gmail.com
Fri Apr 19 18:37:32 EDT 2019

On Sat, Apr 20, 2019 at 12:24 AM C W <tmrsg11 at gmail.com> wrote:
> Am I miss reading something? Thank you in advance!


You are missing that the broadcasting rules typically apply to
arithmetic operations and methods that are specified explicitly to
broadcast. There is no mention of broadcasting in the docs of np.dot
[1], and its behaviour is a bit more complicated.
Specifically for multidimensional arrays (which you have), the doc says

If a is an N-D array and b is an M-D array (where M>=2), it is a sum
product over the last axis of a and the second-to-last axis of b:
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])

So your (3,4,5) @ (3,5) would want to collapse the 4-length axis of
`a` with the 3-length axis of `b`; this won't work. If you want
elementwise multiplication according to the broadcasting rules, just
use `a * b`:

>>> a = np.arange(3*4*5).reshape(3,4,5)
... b = np.arange(4*5).reshape(4,5)
... (a * b).shape
(3, 4, 5)

[1]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

More information about the NumPy-Discussion mailing list