mindspore.ops.MatMul

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

将矩阵 a 和矩阵 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\]

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

说明

对于 \(N * M\) 不能被16整除的情况下,在Ascend环境上性能会比较差。

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

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

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

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

输出:

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

异常:
  • TypeError - transpose_atranspose_b 不是bool。

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

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

支持平台:

Ascend GPU CPU

样例:

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