python3 numpy中数组相乘np.dot(a,b)运算的规则说明
作者:Moelimoe 发布时间:2022-05-08 16:23:29
python np.dot(a,b)运算规则解析
首先我们知道dot运算时不满 * 换律的,np.dot(a, b)与np.dot(b, a)是不一样的
另外np.dot(a,b)和a.dot(b)果是一样的
1.numpy中数组相乘np.dot(a,b)运算条件:
对于两数组a和b :
示例一:
a = np.array([[3], [3], [3]]) # (3,1)
b = np.array([2, 2, 1]) # (3,)
print(a, "\na的shape", a.shape)
print(b, "\nb的shape", b.shape)
c = b.dot(a)
print(c, "\nc的shape", c.shape)
输出:
[3]
[3]]
a的shape (3, 1)
[2 2 1]
b的shape (3,)
[15]
c的shape (1,)
示例二:
a = np.array([[2,2,2,1],[3,3,3,1],[4,4,4,4]]) # shape=(3,4)
b = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]]) # shape=(4,3)
可以直接看他们的shape:a的shape为(3, 4)设为(m, n);b的shape为(4, 3)设为(x, y)
对于上面两个数组a,b:
np.dot(a,b)的运算条件为:n==x,如果a的shape变为(4, 3)则两则无法dot
简单来说规律就是:如果a.shape=(m,n),b.shape=(x,y)那么**np.dot(a,b)**的运算条件为:n=x (这一点用于在python理解和快速判断数组的shape是否用对了)
实际上数组运算的规律将两个数组画出来,是这样的:
2.np.dot(a,b)运算之后的结果解析
规律:dot之后会将两组数组中相等的(符合dot条件的)维度消掉,得到剩下的维度组合成新的数组,如果剩下只有一个维度则为行(对应一维),列是无
对于a.shape=(m,n),b.shape=(x,y):
dot之后n和x会消掉,结果shape变成(m,y)
如果n为1(或者空),shape变为(y,)
e.g1:
a = np.array([1,1,1]) # shape=(3,)
b = np.array([[3],[3],[3]]) # shape=(3,1)
print(np.dot(a,b))
print("dot之后的shape为:", np.dot(a,b).shape)
那么,3和3消掉,剩下只有一个数1,对应1行没有列==>(1,)
运算结果:
[9]
dot之后的shape为:(1,)
e.g2:
a.shape=(4,1)
b.shape=(1,4)
那么( 1和1消掉,剩下(4,4) )
np.dot(a,b)的shape为(4,4)
补充:Python3中的列表、数组和矩阵及*、np.dot和np.multiply解析
今天用Python进行数据处理的时候,突然发现自己搞不清Python中的列表和数组有啥区别及其运算规则,总是得不到自己想要的结果。于是就开始在网上找相关资料,发现很多资料讲的都十分片面,下面自己总结的各个资料,给大家进行详细的解释:
1.列表、数组和矩阵
列表是Python中最基本的数据结构,列表中可以存储数字、字符串等,因此Python可以通过列表存储数组;
数组是Python扩展库Numpy中的一种数据结构ndarray;
矩阵是同样是Python扩展库Numpy中的一种数据结构mat;
那么既然存在列表,为什么我们不直接使用Python中的列表,而使用Numpy呢?原因显然意见,Python中列表的存储效率和输入输出性能远不及Numpy中的数组和矩阵,但是由于列表中可以存储任意元素,因此列表的通用性方面要比数组和矩阵强。总之列表与数组、矩阵各有各的优势,要视使用场合选择合适的数据结构。
同样Numpy中的数组和矩阵也是有区别的:
Numpy中的矩阵必须是2维的,而Numpy中数组可以是多维的,因此矩阵是数组的一个特例,所以在Numpy中的矩阵继承着数组的所有特性;
同时我们常常需要查看列表、数组和矩阵的属性,如size、shape、len
其中len():返回对象的长度,可以作用于列表、数组和矩阵:len(list([1,2,3]))
size()和shape()是Numpy扩展库中才用的函数:
size():计算所有数据的个数,同样可以作用于列表、数组和矩阵:np.size(np.array([1,2,3]))
shape():得到数据每维的大小,同样可以作用于列表、数组和矩阵:np.shape(np.array([1,2,3]))
不同于len,shape和size还可以作为数组和矩阵的属性(列表不行),使用方法如下:a.shape、a.size
2.Python中的星号(*)、np.multiply()、np.dot()
1.星号(*):
对数组执行对应位置相乘;对矩阵执行矩阵乘法运算
2.np.multiply()
不管对矩阵还是数组都是执行对应位置相乘
3.np.dot()
对秩为1的数组:对应位置相乘并求和
对秩不为1的数组:矩阵乘法运算
对矩阵:矩阵乘法运算
上面是对列表、数组、矩阵以及Python中各种乘法的总结,果然总结对自己理解问题有很大的帮助,现在自己自己很清楚它们的用法了,希望这篇博客也可以帮助大家~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/Moelimoe/article/details/100004920
猜你喜欢
- 这里推荐使用OTK脚本安装Oracle,会大大提高安装Oracle的成功系数。DescriptionoraToolKit is the Sw
- 事件流浏览器中的事件流意味着页面上可有不仅一个,甚至多个元素响应同一个事件。而这一个或多个元素响应事件发生的先后顺序在各个浏览器(主要针对I
- 一般情况下会有几种情况需要你把数据库设为只读: 1. Insert,Update,Delete 触发器 2. Check 约束 和 Dele
- 把这两个很普遍性的网友比较关心的问题总结回答一下。in和exist的区别从sql编程角度来说,in直观,exists不直观多一个select
- 先看一段HTML代码,在下边这段代码中,这张图片的宽度未知,我想写在CSS中写一行限制最大宽度为50px:<div id=&
- 附上官网地址:https://pytorch.org/docs/stable/index.html1.torch.squeezesqueez
- 阅读:Chapter 3 * 的表格“Misquotations are the only quotations tha are never
- 刚才运行了一段代码,来查看Request.ServerVariables里面有多少值,看了一下,共50个!代码<%=Request.S
- 哈喽兄弟们,今天来分享一下,Python初学者必须要学会的技能,Python进行debug操作。本文用的测试代码:from torchvis
- 前言 简述bs4:使用pip install beautifulsoup4将bs4包安装到当前的python解释器环境,使用fro
- python是一个很有趣的语言,可以在命令行窗口运行。python中有很多功能强大的模块,这篇经验告诉你,如何使用python的pygal模
- 问题一:TypeError: a bytes-like object is required, not 'str'解决:该问
- 在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么
- 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取
- 均方损失函数:这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标。很多的 loss 函数都有 size_averag
- 一 安装oracle数据库成功之后,会显示相关的数据库信息: 全局数据库名:oracle 系统标识符(SID):oracle 服务器参数文件
- 首先还是应该科普下函数参数传递机制,传值和传引用是什么意思?函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进
- 一 程序预览本程序已经写了多年, 很久没用, 不过刚运行了下竟然还可以成功运行. 先来张运行结果图.二 最近的滴滴APP已经可以支持设置自动
- 观察者模式中的主题对象一般存在着一个其他服务依赖的核心服务,并且维护着其他依赖此核心服务的对象列表(即观察者或监视者列表),当主题对象发生变
- 实现效果将位于/img目录下的1000张.png图片,转换成.webp格式,并存放于img_webp文件夹内。源图片目录目标图片目录关于批量