Home > Software engineering >  High-dimensional array multiplication
High-dimensional array multiplication

Time:09-29

Consider the following code.

import numpy as np
array1 = np.random.random((3,3,3))
array2 = np.random.random((3,3,3))
array3 = array1@array2

What does array3 contain? I know it also has shape (3,3,3). If array1 and array2 were two-dimensional, then array3 would be the matrix multiplication of the arrays. Has the @ operation a mathematical meaning?

CodePudding user response:

This is explained in PEP 465:

For inputs with more than 2 dimensions, we treat the last two dimensions as being the dimensions of the matrices to multiply, and ‘broadcast’ across the other dimensions. This provides a convenient way to quickly compute many matrix products in a single operation. For example, arr(10, 2, 3) @ arr(10, 3, 4) performs 10 separate matrix multiplies, each of which multiplies a 2x3 and a 3x4 matrix to produce a 2x4 matrix, and then returns the 10 resulting matrices together in an array with shape (10, 2, 4).

So for your code array3[0, :, :] contains the result of the matrix-matrix multiplication array1[0, :, :] @ array2[0, :, :], and so on.

CodePudding user response:

In numpy @ does matrix multiplication

While * does element wise multiplication or Hadamard product

  • Related