Python3中numpy dot和matmul函数有什么区别?

Fah*_*him 5 python numpy numpy-ndarray

我尝试过使用这两个函数,它们似乎是相同的。但是为什么 numpy 对于同一个操作有两个不同的函数呢?我只是想确定一下。

到目前为止,我发现它们对于二维数组的工作原理相同,但在任何地方都没有发现任何差异。

小智 5

@ 运算符调用数组的matmul方法,而不是点。此方法也作为函数 np.matmul 出现在 API 中。

>>> a = np.random.rand(8,13,13)
>>> b = np.random.rand(8,13,13)
>>> np.matmul(a, b).shape
(8, 13, 13)
Run Code Online (Sandbox Code Playgroud)

从文档中:

matmul 与 dot 有两个重要的不同之处。

  • 不允许与标量相乘。
  • 矩阵堆栈一起广播,就好像矩阵是元素一样。

最后一点清楚地表明,当传递 3D(或更高维)数组时,dot 和 matmul 方法的行为不同。从文档中引用更多内容:

对于矩阵相乘:

如果任一参数为 ND,N > 2,则将其视为驻留在最后两个索引中的矩阵堆栈并相应地进行广播。对于 np.dot:

对于二维数组,它相当于矩阵乘法,对于一维数组,它相当于向量的内积(没有复杂的共轭)。对于 N 维,它是 a 的最后一个轴与 b 的倒数第二个轴的和积

有关更多信息,请查看: numpy dot() 和 Python 3.5+ 矩阵乘法之间的区别 @

我特此引用最佳答案,因为它非常清楚有什么区别。请说出您是否需要更多帮助。