mindspore.ops.MatMul

class mindspore.ops.MatMul(transpose_a=False, transpose_b=False)[source]

Multiplies matrix a and matrix b.

\[(Output)_{i j}=\sum_{k=1}^{p} a_{i k} b_{k j}=a_{i 1} b_{1 j}+a_{i 2} b_{2 j}+\cdots+a_{i p} b_{p j}, p\in N\]

where the \(i,j\) indicates the output of the i-th row and j-th column element.

Note

If \(N * M\) cannot be divided by 16, the performance will be poor in ascend environment. The dtype of inputs must be same.

Parameters
  • transpose_a (bool) – If True , a is transposed before multiplication. Default: False .

  • transpose_b (bool) – If True , b is transposed before multiplication. Default: False .

Inputs:
  • a (Tensor) - The first tensor to be multiplied. The shape of the tensor is \((N, C)\). If transpose_a is True , its shape must be \((C, N)\) after transpose.

  • b (Tensor) - The second tensor to be multiplied. The shape of the tensor is \((C, M)\). If transpose_b is True , its shape must be \((M, C)\) after transpose.

Outputs:

Tensor, the shape of the output tensor is \((N, M)\).

Raises
  • TypeError – If transpose_a or transpose_b is not a bool.

  • TypeError – If the dtype of a and the dtype of b are not the same.

  • ValueError – If the column of matrix dimensions of a is not equal to the row of matrix dimensions of b.

  • ValueError – If length of shape of a or b is not equal to 2.

Supported Platforms:

Ascend GPU CPU

Examples

>>> import mindspore
>>> import numpy as np
>>> from mindspore import Tensor, ops
>>> a = Tensor(np.ones(shape=[1, 3]), mindspore.float32)
>>> b = Tensor(np.ones(shape=[3, 4]), mindspore.float32)
>>> matmul = ops.MatMul()
>>> output = matmul(a, b)
>>> print(output)
[[3. 3. 3. 3.]]