mindspore.ops.MatMul

查看源文件
class mindspore.ops.MatMul(transpose_a=False, transpose_b=False)[源代码]

将矩阵 a 和矩阵 b 相乘。

(Output)ij=k=1paikbkj=ai1b1j+ai2b2j++aipbpj,pN

其中, i,j 表示输出的第i行和第j列元素。

说明

  • NM 不能被16整除时,算子在Ascend环境上的性能会比较差。

  • 输入Tensor的数据类型必须一致。

  • Ascend上,暂不支持float64类型。

参数:
  • transpose_a (bool,可选) - 如果为 True ,则在相乘之前转置 a。默认值: False

  • transpose_b (bool,可选) - 如果为 True ,则在相乘之前转置 b。默认值: False

输入:
  • a (Tensor) - 要相乘的第一个Tensor。如果 transpose_aFalse ,则该Tensor的shape为 (N,C) ;否则,该Tensor的shape为 (C,N)

  • b (Tensor) - 要相乘的第二个Tensor。如果 transpose_bFalse ,则该Tensor的shape为 (C,M) ;否则,该Tensor的shape为 (M,C)

输出:

Tensor,输出Tensor的shape为 (N,M)

异常:
  • TypeError - transpose_atranspose_b 不是bool。

  • TypeError - a 的dtype和 b 的dtype不一致。

  • ValueError - 矩阵 a 的列不等于矩阵 b 的行。

  • ValueError - ab 的维度不等于2。

支持平台:

Ascend GPU CPU

样例:

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