百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

傻傻分不清楚的点积与矩阵乘法 Part4

off999 2024-10-14 12:13 33 浏览 0 评论

作者:Minkyung Kang

译者:知源觅流

原文链接:https://github.com/mkang32/python-basics/blob/master/numpy/dot_vs_multiply_vs_matmul_vs_at.ipynb

4.np.dot和np.matmul(@) 有什么区别?

在上述内容中,我提到不建议使用 np.dot 对高维数组进行操作。这是什么意思呢?

在 stackoverflow 中,有一个有趣的问题(https://stackoverflow.com/questions/34142485/difference-between-numpy-dot-and-python-3-5-matrix-multiplication)讨论了 np.dot@ 之间的差异。让我们来看看这个。

# define input arrays
a = np.random.rand(3,2,2)  # 2 rows, 2 columns, in 3 layers 
b = np.random.rand(3,2,2)  # 2 rows, 2 columns, in 3 layers 
# perform matrix multiplication
c = np.dot(a, b)
d = a @ b  # Python 3.5+
>>> c.shape  # np.dot
(3, 2, 3, 2)

>>> d.shape  # @
(3, 2, 2)

对于相同的输入,有完全不同的输出 ,怎么会这样?这是由于对 np.dot@ 的不同定义导致的。请看一下stackoverflow上的高赞回答(https://stackoverflow.com/a/34142617/9449085),也许能接触我们的疑惑。

从文档中我们可以看到,matmul 在以下两个方面与 dot 存在重要的差异:

1. matmul 不允许标量乘法。

2. matmul把矩阵堆叠在一起进行广播,就像矩阵是元素一样。(Stacks of matrices are broadcast together as if the matrices were elements.)

最后一点清楚的表明,dotmatmul方法在处理3-D或更高维的数组时表现不同。下面让我们从文档中获取更多信息。

对于 matmul 函数: 如果任何一个参数是 N-D数组(N>2),则将其视为在最后两个索引中驻留的矩阵堆栈,并相应地进行广播。(If either argument is N-D, N > 2, it is treated as a stack of matrices residing in the last two indexes and broadcast accordingly.)

对于 np.dot函数: 对于2-D数组,它等同于矩阵乘法;对于1-D数组,它等同于向量的内积(不包括复共轭)。对于N维数组,它是a的最后一个轴和b的倒数第二个轴上的元素的乘积之和(sum product)。(For 2-D arrays it is equivalent to matrix multiplication, and for 1-D arrays to inner product of vectors (without complex conjugation). For N dimensions it is a sum product over the last axis of a and the second-to-last of b.)

还有, numpy的官方文档(https://numpy.org/doc/stable/reference/generated/numpy.dot.html)上也有更多的细节规定。

如果 a 是一个N-D数组,b 是一个M-D数组(其中M>=2),那么它是 a 的最后一个轴和 b 的倒数第二个轴上的元素的乘积之和(If a is an N-D array and b is an M-D array (where M>=2), it is a sum product over the last axis of a and the second-to-last axis of b):

dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])

因此,简而言之,在正常的矩阵乘法情况下,如果我们想要处理最后两个索引中的每个矩阵堆栈,我们应该使用matmul

5. 结语

  • * == np.multiply != np.dot != np.matmul == @
  • *np.multiply需要np.sum来执行点积。不建议用于点积或矩阵乘法。
  • np.dot 适用于点积和矩阵乘法。但是,由于名称的原因,建议避免将其用于矩阵乘法。
  • np.matmul@ 是同一个东西,专为执行矩阵乘法而设计。@被添加到Python 3.5+中,以使矩阵乘法具有自己的中缀。
  • np.dotnp.matmul 的行为大体相似,但有两个例外:1)matmul不允许用标量相乘,2)对于N>2的维度,计算方式不同。可以查看文档,从而决定使用哪个函数。

一句话概述:

对于点积运算,使用 np.dot。对于矩阵乘法,对于 Python 3.5 或以上版本使用 @,对于早期 Python 版本使用 np.matmul

6. 参考资料

  • NumPy Matrix Multiplication — np.matmul() and @(https://blog.finxter.com/numpy-matmul-operator/)
  • numpy.dot official document(https://numpy.org/doc/stable/reference/generated/numpy.dot.html)
  • PEP 465 – A dedicated infix operator for matrix multiplication(https://www.python.org/dev/peps/pep-0465/)
  • Difference between numpy dot() and Python 3.5+ matrix multiplication @(https://stackoverflow.com/questions/34142485/difference-between-numpy-dot-and-python-3-5-matrix-multiplication)




荟萃知识,滋养你我。

相关推荐

手机迅雷ios老版本直装(手机迅雷ios旧版下载beta)

IOS用很多软件都能替代迅雷,就算迅雷不能使用的话,也可以使用其他的软件来代替,软件的种类也是非常多的。可以先下载一个第三方助手,然后尝试一下能不能把迅雷下载下来,大多数情况下,下载一个第三方助手就可...

可以和虚拟人物聊天的软件(可以和虚拟人物聊天的软件,用QQ直接登陆)

在火星App中与多个虚拟人物对话,其实是一个相当有趣且简单的体验。首先,你需要确保已经下载并安装了火星App,并打开它。接着,在App的界面中,你可以找到虚拟人物的选项。点击进去后,你会看到多个虚拟人...

三年片在线观看免费大全电影

第一位:极限影音这是中国第一家免费电影网站。虽然域名有点难记,但它在很多免费电影网站上都有很好的服务。这是个好名声。你可以在这里得到最快和最新的免费电影。第二位:007免费在线电影这个网站是一个很好的...

旧版qq(旧版qq豌豆荚)

手机QQ软件好多更新都不好用,可能是刚开始不稳定。建议用回旧版本先。你可以打开QQ主页,然后按软件QQ下载,里面有个链接是旧版本下载的,点开下载你以前的版本就可以了    一、检查qq版本是否过于陈旧...

湖南卫视直播在线观看高清电视台

1.解锁手机,找到桌面上的央视频APP,打开。2.进入主页面后,点击页面底部的“电视”选项。3.进入电视页面后,默认显示的是CCTV的频道,上方切换到“卫视”频道。4.在打开的卫视图标中我们就...

rar解压软件官网(rar解压器官方免费下载)
rar解压软件官网(rar解压器官方免费下载)

winrar是解压软件。你没有安装winrar,所以打不开用winrar加压的软件。在网上下载个安装后就能用了。去安装解压软件啊,网上到处都有,直接在网上搜索就可以,软件下好后安装,将其设置在右键中,以后右键单击就可以解压相应winrar文...

2026-01-23 09:43 off999

音频编辑转换器(音频编辑转换器怎么用)

高转低音频转换器接法是指将一种信号转换成另一种信号的装置。信号是信息存在的形式或载体。在自动化仪表设备和自动控制系统中,常将一种信号转换成另一种与标准量或参考量比较后的信号,以便将两类仪表联接起来,因...

安卓游戏中心下载安装(安卓游戏中心app)

格来云游戏、Nibiru游戏城、快游戏、蟋蟀游戏大厅、石头游戏。以上app资源丰富,且支持外设连接,更新及时。1、格来云游戏:格来云游戏是动视云科技开发的APP,格来云不依赖玩家的电脑性能和储存,连...

正当防卫3手游下载(正当防卫三正版下载)

通过QQ浏览器,或者应用商店下载即可。华为手机上下载《正当防卫4》(JustCause4)的方法如下:方法一:使用华为应用市场(华为AppGallery)1.打开华为应用市场。2.在搜索框中输...

可以免费下载所有歌曲的网站

一、http://51Ape.Com一个免费提供无损音乐下载的网站,专注于Ape音乐、Flac音乐以及Wav等各类高品质无损音乐的免费下载,是目前国内比较好的免费音乐下载网站。二、91听歌网提供无损音...

龙珠斗士z手游版下载(龙珠斗士z手游版下载ios)

召唤神龙,实现愿望。龙珠z斗士中只要集齐七颗龙珠就可以召唤出神龙,来实现自己的愿望。在漫画动画各类手游中都是这样首先进入游戏主界面,点击“斗士”按钮进入选角界面,在选角界面中选择你要使用的角色并确认...

可以手动插人物的游戏手游(可以手动插人物的游戏手游app)

在手游对局中,左上角有一个开关,可切换手动开火和自动开火,切换到自动开火后,准星描到敌方人物即会自动开火。当然,并不是所有模式中都有自动开火开关,是特定的一些模式有该开关,比如挑战模式、刀战模式等。另...

手机铃声最好听的歌(手机铃声最好听的歌曲有哪些)

Everythingisnotwhatitseems超喜欢这首的,绝对不会撞见跟你铃声一样的Push艾薇儿的新歌,很好听,也很适合做铃声Foreverandalways钢琴版副歌部分很好听布兰妮的3也...

千千静听官网(十大免费音乐网站)

千千静听起源于2002年,千千静听是一款完全免费的音乐播放软件,集播放、音效、转换、歌词等众多功能于一身。其小巧精致、操作简捷、功能强大的特点,深得用户喜爱,被网友评为中国十大优秀软件之一,并且成为目...

成品ppt网站国外(免费生成ppt的网站)

免费ppt成品怎么下载?不确定您要下载哪类的ppt。如果想要下载初中语文课件的话,免费成品ppt可以通过无忧无虑中学语文网下载,上面按照年级,教材版本分门别类的课件资源,教案参考,还有相应的练习题,甚...

取消回复欢迎 发表评论: