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

3

我已经尝试使用这两个函数,它们似乎是相同的。但为什么numpy会有两个用于相同操作的不同函数?我只是想确保。

到目前为止,我发现它们对于二维数组的工作方式是相同的,但没有在任何地方找到任何区别。


这个问题已经在这里得到了答案:https://dev59.com/iFsX5IYBdhLWcg3wLc6J在提问之前,请尝试搜索一下。 - Zabir Al Nazi
这主要是历史问题。np.dot 长期以来一直是 numpy 的一部分。matmul 与其操作符 @ 是新的,具有不同的处理 3D(和更大)数组的方式。对于2D和1D数组,它们基本上是相同的。 - hpaulj
在发布这里之前,我实际上已经找到了那篇帖子。只是标题误导了我,因为我不知道“@”与“np.matmul”的作用相同。 - Fahim
1个回答

4

@ 运算符调用数组的 matmul 方法,而不是 dot 方法。这个方法也可以通过 API 中的函数 np.matmul 调用。

>>> a = np.random.rand(8,13,13)
>>> b = np.random.rand(8,13,13)
>>> np.matmul(a, b).shape
(8, 13, 13)

根据文档:

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

  • 禁止使用标量进行乘法。
  • 矩阵堆栈被视为元素一样进行广播。

最后一点表明,当传递3D(或更高维)数组时,dot和matmul方法的行为会有所不同。再次引用文档:

对于matmul:

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

对于np.dot:

对于2-D数组,它等价于矩阵乘法,对于1-D数组,它等价于向量的内积(没有复共轭)。 对于N维度,它是a的最后一个轴和b的倒数第二个轴的总乘积。

有关更多信息,请查看: Difference between numpy dot() and Python 3.5+ matrix multiplication @

我引用了顶部回答,因为它非常清楚地说明了区别。如果您需要更多帮助,请告诉我。


当问题明显有答案时,不需要回答问题,只需发表评论以指出它。 - Zabir Al Nazi
谢谢您的回复。我不知道“@”实际上是用于矩阵乘法的。 - Fahim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接