tensorly.matmul

matmul(a, b)

Matrix multiplication of tensors representing (batches of) matrices

Parameters
atl.tensor

[description]

btl.tensor

tensors representing the matrices to contract

Returns
a @ b

matrix product of a and b

Notes

The behavior depends on the arguments in the following way.

  • If both arguments are 2-D they are multiplied like conventional matrices.

  • If either argument is N-D, N > 2, it is treated as a stack of matrices residing in the last two indexes and broadcast accordingly.

  • If the first argument is 1-D, it is promoted to a matrix by prepending a 1 to its dimensions. After matrix multiplication the prepended 1 is removed.

  • 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.

matmul differs from dot in two important ways:

  • Multiplication by scalars is not allowed, use * instead.

  • Stacks of matrices are broadcast together as if the matrices were elements, respecting the signature (n,k),(k,m)->(n,m):

>>> a = np.ones([9, 5, 7, 4])

>>> c = np.ones([9, 5, 4, 3])

>>> np.dot(a, c).shape
(9, 5, 7, 9, 5, 3)

>>> np.matmul(a, c).shape
(9, 5, 7, 3)

>>> # n is 7, k is 4, m is 3

The matmul function implements the semantics of the @ operator introduced in Python 3.5 following PEP 465.