Why does matrix multiplication with a 1D-array work?

a = np.array([[1,1],
             [2,2],
             [3,3]])
b = np.array([10,20])
a.shape
b.shape
[email protected]

Output:

(3, 2)
(2,)
array([30, 60, 90])

Something must be happening to b in the backend? I expected @ to require 2D matrices for both operands

For context, and because I myself didn’t know about the existence of the @ notation:
This was introduced in PEP 465 as a way to distinguish between regular multiplication and matrix multiplication, when there is ambiguity.

NumPy followed this convention and implemented it in the numpy.matmul function. So [email protected] is just numpy.matmul(a,b).

And straight from the documentation we read the following:

If the second argument is 1-D, it is promoted to a matrix by appending a 1 to its dimensions. After matrix multiplication the appended 1 is removed.

Which explains why b doesn’t have to be a 2D-array and supports that something is indeed happening under the hood.

2 Likes