python的matmul_numpy中dot()、outer()、multiply()以及matmul()的区别
Python中的几种乘法
在numpy的官方教程中,dot()是比较复杂的一个,因为参数的不同可以实现等同于np.matmul() 或者 np.multiply()的作用
numpy.dot(a,b,out=None)
两个array之间的点乘。具体来说:
① 如果a和b都是一维的,那么结果就是普通的內积(inner product)。可以使用np.matmul 或者 a @ b 得到相同的答案。
# 1-D array
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result_ab = np.dot(a, b)
result_ba = np.dot(b, a)
print('result_ab: %s' %(result_ab))
print('result_ba: %s' %(result_ba))
结果如下(a,b参数的顺序不会影响结果,对应位置相乘):
result_ab: 32
result_ba: 32
image.png
② 如果a和b都是二维的,运算等同于矩阵乘法(Dot product)。可以使用np.matmul 或者 a @ b 得到相同的答案。
# 2-D array: 2 x 3
a = np.array([[1, 2, 3], [4, 5, 6]])
# 2-D array: 3 x 2
b = np.array([[1, 2], [3, 4], [5, 6]])
result_ab = np.dot(a, b)
result_ba = np.dot(b, a)
print('dot_result_ab:\n %s' %(result_ab))
print('dot_result_ba:\n %s' %(result_ba))
result_ab = np.matmul(a, b)
result_ba = np.matmul(b, a)
print('matmul_result_ab:\n %s' %(result_ab))
print('matmul_result_ba:\n %s' %(result_ba))
结果如下:
dot_result_ab:
[[22 28]
[49 64]]
dot_result_ba:
[[ 9 12 15]
[19 26 33]
[29 40 51]]
matmul_result_ab:
[[22 28]
[49 64]]
matmul_result_ba:
[[ 9 12 15]
[19 26 33]
[29 40 51]]
(1) 矩阵乘法,位置会改变答案。
(2) 使用matmul()结果相同
image.png
③ 如果 a 或者 b 中有一个是标量的,效果等价于np.multiply ,可以使用 multiply(a,b) 或者 a * b 也可以。
# 2-D array: 2 x 3
a = np.array([[1, 2, 3], [4, 5, 6]])
# 标量
b = 3
result_ab = np.dot(a,b)
print('result_ab:\n %s' %(result_ab))
multiply_result_ab = np.multiply(a,b)
print('multiply_result_ab:\n %s' %(multiply_result_ab))
答案如下:
result_ab:
[[ 3 6 9]
[12 15 18]]
multiply_result_ab:
[[ 3 6 9]
[12 15 18]]
(1)参数位置不会改变答案
(2)使用multiply或者 * 也可以
④ 如果a是 N-D 数组, b 是 1-D的数组,答案是,a和b最后一个轴的乘积。好像比较难以理解,看demo。
# 2-D array: 2 x 3
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([1,2,3])
result_ab = np.dot(a,b)
print('result_ab:\n %s' %(result_ab))
结果如下:
result_ab:
[14 32]
如果a的维度(3,3,3), b的维度 (3,) 【注意(3,)和(3,0)是不同的】,那么答案是(3,3)的维度
⑤ 如果a是N-D数组, b 是 M-D数组(M>2),答案为a的最后一个轴与a的倒数第二个轴的和。
这个可能实际使用的时候不多。
numpy的官方demo。
>>> a = np.arange(3*4*5*6).reshape((3,4,5,6))
>>> b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))
>>> np.dot(a, b)[2,3,2,1,2,2]
499128
>>> sum(a[2,3,2,:] * b[1,2,:,2])
499128
可以看dot的第二小点。
下面展示一下官方的函数:
image.png
image.png
可以看dot的第三小点。
image.png
image.png
四、还有需要注意的
对于array对象,*和np.multiply函数代表的是数量积,如果希望使用矩阵的乘法规则,则应该调用np.dot和np.matmul函数。
对于matrix对象,*直接代表了原生的矩阵乘法,而如果特殊情况下需要使用数量积,则应该使用np.multiply函数。
image.png
比较上图和下图的不同
image.png
python的matmul_numpy中dot()、outer()、multiply()以及matmul()的区别相关推荐
- python定义类()中写object和不写的区别
python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...
- python random randint_python中random.randint和random.randrange的区别详解
在python中,通过导入random库,就能使用randint 和 randrange 这两个方法来产生随机整数.那这两个方法的区别在于什么地方呢?让我们一起来看看! 区别: randint 产生的 ...
- TensorFlow中multiply和matmul的区别
TensorFlow中multiply是两个矩阵之间对应元素相乘,可以是矩阵*矩阵,也可以是矩阵*向量或是矩阵*一个数: 而matmul则是矩阵相乘,是矩阵行*矩阵列,即a x b.如下所示: 这个是 ...
- python re search match_简诉Python Re模块中re.search和re.match的区别
先前的两篇文章<python re.match函数是什么,了解python match函数的使用>,<Python中的python re.search方法详解>,我们介绍了Py ...
- python的类中 _、__和__xx__的区别
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. Python中 ...
- python time包中的time.time()和time.clock()区别和使用
在统计python代码 执行速度时要使用到time包,在查找相关函数时有time.time()和time.clock()两个函数可供选择.而两者是有区别的: cpu 的运行机制:cpu是多任务的,例如 ...
- Python笔记-Collection中Iterable、Iterator和Generator的区别
Iterable Iterable是Python集合的一种,导入方式为from collections import Iterable.Iterable对象都具有__iter__()方法,可以被for ...
- python matplotlib.pyplot中add_subplot subplot函数的用法与区别(其实没什么区别)
引用文章 https://blog.csdn.net/you_are_my_dream/article/details/53439518
- numpy矩阵乘法中的multiply,matmul和dot
用numpy做矩阵运算时,少不了用到矩阵乘法.本文帮你迅速区分multiply, matmul和dot的区别. numpy官方文档中的说明:(想深入了解可以一戳) multiply: https:// ...
最新文章
- shell脚本俄罗斯方块游戏
- 网站截图环境 php,Linux环境下php实现给网站截图的方法
- deepin/Ubuntu安装最新版docker-ce命令整理
- 和哪个专业的男生谈恋爱最惨?
- 关于Javascript闭包的理解(二)
- CentOS搭建SVN记录
- [转摘] 我的同学聚会--性格决定命运
- 图论及其应用:第二次作业
- RS485接口上的PTC
- office创建数据透视表
- 5G牌照发放了,但需要购买5G手机的用户应等明年再购买
- Java中常见常用的类
- 算法教给我的人生道理-贪婪算法
- 计算机怎么给硬盘加密,电脑上的硬盘如何加密?几种文件加密的方法
- 加拿大程序员趣闻系列 1_N,kotlin循环
- 泛泰长短信修改教程(供其他泛泰机型参考)
- Revit中添加水平仰视平面图及水平剖面
- 阿拉伯数字对应人民币大写表
- 第二节 构成人体必需的营养素
- day199-2019-01-05-英语流利阅读-待学习