我已经尝试使用这两个函数,它们似乎是相同的。但为什么numpy会有两个用于相同操作的不同函数?我只是想确保。
到目前为止,我发现它们对于二维数组的工作方式是相同的,但没有在任何地方找到任何区别。
我已经尝试使用这两个函数,它们似乎是相同的。但为什么numpy会有两个用于相同操作的不同函数?我只是想确保。
到目前为止,我发现它们对于二维数组的工作方式是相同的,但没有在任何地方找到任何区别。
@ 运算符调用数组的 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 @
我引用了顶部回答,因为它非常清楚地说明了区别。如果您需要更多帮助,请告诉我。
np.dot
长期以来一直是numpy
的一部分。matmul
与其操作符@
是新的,具有不同的处理 3D(和更大)数组的方式。对于2D和1D数组,它们基本上是相同的。 - hpaulj