Numpy中np.dot与np.matmul的区别详解
作用相同的情况
在若两个array的维度均为两维的情况下,两个函数的结果是相同的,例如:
a = np.array([i for i in range(6)]).reshape([2,3]) b = np.array([i for i in range(6)]).reshape([3,2]) """ a [[0 1 2] [3 4 5]] b [[0 1] [2 3] [4 5]] """
>>> np.dot(a,b) array([[10, 13], [28, 40]]) >>> np.matmul(a,b) array([[10, 13], [28, 40]])
作用不同的情况
在三维的情况下,假设
a = np.array([i for i in range(12)]).reshape([2,2,3]) b = np.array([i for i in range(12)]).reshape([2,3,2]) """ a [[[ 0 1 2] [ 3 4 5]] [[ 6 7 8] [ 9 10 11]]] b [[[ 0 1] [ 2 3] [ 4 5]] [[ 6 7] [ 8 9] [10 11]]] """
>>> np.matmul(a,b) array([[[ 10, 13], [ 28, 40]], [[172, 193], [244, 274]]]) >>> np.matmul(a,b).shape (2, 2, 2)
这是因为matmul将最后两维作为矩阵的两维,相当于有2个2 ∗ 2 2*22∗2的矩阵,因此通过对应位置矩阵进行矩阵乘法,会得到2个2 ∗ 2 2*22∗2的结果
>>> np.dot(a,b) array([[[[ 10, 13], [ 28, 31]], [[ 28, 40], [100, 112]]], [[[ 46, 67], [172, 193]], [[ 64, 94], [244, 274]]]]) >>> np.dot(a,b).shape (2, 2, 2, 2)
可以看到其结果与matmul不同并且结果是四维的,这是因为dot将a数组的最后一维作为向量,并将b数组的倒数第二维作为了另一个向量,因此a中可以看成有2 ∗ 2 2*22∗2个向量,b中有2 ∗ 2 2*22∗2个向量,dot会将a的向量与b的向量全部组合在一起,因此会有( 2 ∗ 2 ) ∗ ( 2 ∗ 2 ) (2*2)*(2*2)(2∗2)∗(2∗2)种结果。
到此这篇关于Numpy中np.dot与np.matmul的区别详解的文章就介绍到这了,更多相关Numpy np.dot与np.matmul内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python报错:OSError: [Errno 22] Invalid argument解决方案及应用实例
最近跑别人的项目遇到一个这样的问题一开始以为是没有用管理员的权限运行,导致创建不了日志文件后来发现是和windows的命名规则冲突了,这篇文章主要给大家介绍了关于Python报错:OSError: [Errno 22] Invalid argument的解决方案及应用实例,需要的朋友可以参考下2024-07-07Python 3.x 判断 dict 是否包含某键值的实例讲解
今天小编就为大家分享一篇Python 3.x 判断 dict 是否包含某键值的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-07-07
最新评论