我试着用这两个函数工作,它们似乎是一样的。但是为什么numpy会有两个不同的函数来完成同样的操作呢?我只是想确认一下。
到目前为止,我发现它们对二维数组的工作原理是一样的,但没有发现任何区别。
@操作符调用数组的 垫料 方法,而不是点。这个方法在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:
对于二维数组,它相当于矩阵乘法,对于一维数组,它相当于向量的内积(不含复数共轭)。对于N个维度,它是a的最后一个轴和b的第二到最后一个轴的和积。
更多信息请查看。numpy dot()和Python 3.5+矩阵乘法的区别 @。
在此我举出最上面的答案,因为很清楚两者的区别是什么。如果您需要更多的帮助,请说。