python中数组和矩阵乘法及使用总结(推荐)


Posted in Python onMay 18, 2019

Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。

但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积

如果a,b是数组的话,则a*b是数组的运算

1.对数组的操作

>>> import numpy as np
>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
>>> b=a.copy()
>>> b
array([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
>>> a+b#多维数组的加减,按对应位置操作
array([[ 2, 4, 6],
    [ 8, 10, 12],
    [14, 16, 18]])
>>> a*3#多维数组乘常数,则对数组中每一个元素乘该常数
array([[ 3, 6, 9],
    [12, 15, 18],
    [21, 24, 27]])
>>> np.dot(a,b)#数组的点乘运算通过np.dot(a,b)来实现,相当于矩阵乘
array([[ 30, 36, 42],
    [ 66, 81, 96],
    [102, 126, 150]])
>>> c=np.array([1,2,3])#构造一行三列的数组
>>> c
array([1, 2, 3])
>>> c*a#c为一行三列,放于数组a之前,则对数组a中每行对应位置相乘
array([[ 1, 4, 9],
    [ 4, 10, 18],
    [ 7, 16, 27]])
>>> a*c#c为一行三列,放于数组a之后,依旧是对数组a中每行对应位置相乘
array([[ 1, 4, 9],
    [ 4, 10, 18],
    [ 7, 16, 27]])
>>> #如果想要矩阵运算,则需要np.dot()函数
>>> np.dot(c,a)#c为一行三列,放于数组a之前,按正常矩阵方式运算
array([30, 36, 42])
>>> np.dot(a,c)#c为一行三列,放于数组a之后,相当于矩阵a乘以3行一列的c矩阵,返回结果值不变,格式为1行3列
array([14, 32, 50])
>>> #将c改为多行一列的形式
>>> d=c.reshape(3,1)
>>> d
array([[1],
    [2],
    [3]])
>>> #
>>> np.dot(a,d)#值与np.dot(a,c)一致,但格式以改变为3行1列
array([[14],
    [32],
    [50]])
 
>>> a*a#数组使用*的运算其结果属于数组运算,对应位置元素之间的运算
array([[ 1, 4, 9],
    [16, 25, 36],
    [49, 64, 81]])
>>> #但是不能更改a,d点乘的位置,不符合矩阵运算格式
>>> np.dot(d,a)
Traceback (most recent call last):
 File "<pyshell#28>", line 1, in <module>
  np.dot(d,a)
ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)

对于数组的转置,求逆,求迹运算请参考上篇文章

2.对矩阵的操作

>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a=np.mat(a)
>>> a
matrix([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
>>> b=a
>>> b
matrix([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
>>> a+b#矩阵的加减运算和数组运算一致
matrix([[ 2, 4, 6],
    [ 8, 10, 12],
    [14, 16, 18]])
>>> a-b
matrix([[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]])
>>> a*b#矩阵的乘用*即可表示
matrix([[ 30, 36, 42],
    [ 66, 81, 96],
    [102, 126, 150]])
>>> np.dot(a,b)#与*一致
matrix([[ 30, 36, 42],
    [ 66, 81, 96],
    [102, 126, 150]])
>>> b*a
matrix([[ 30, 36, 42],
    [ 66, 81, 96],
    [102, 126, 150]])
>>> np.dot(b,a)
matrix([[ 30, 36, 42],
    [ 66, 81, 96],
    [102, 126, 150]])
>>> c=np.array([1,2,3])#构造一行三列数组
>>> c
array([1, 2, 3])
>>> c*a#矩阵运算
matrix([[30, 36, 42]])
>>> a*c#不合矩阵规则
Traceback (most recent call last):
 File "<pyshell#63>", line 1, in <module>
  a*c
 File "F:\python3\anzhuang\lib\site-packages\numpy\matrixlib\defmatrix.py", line 309, in __mul__
  return N.dot(self, asmatrix(other))
ValueError: shapes (3,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
>>> np.dot(c,a)#和矩阵运算一致
matrix([[30, 36, 42]])
>>> np.dot(a,c)#自动将a转换成3行1列参与运算,返回结果格式已经变为1行3列而非3行一列的矩阵
matrix([[14, 32, 50]])
>>> c=c.reshape(3,1)
>>> c
array([[1],
    [2],
    [3]])
>>> a*c#和矩阵运算一致
matrix([[14],
    [32],
    [50]])
>>> c*a#不合矩阵运算格式
Traceback (most recent call last):
 File "<pyshell#71>", line 1, in <module>
  c*a 
ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)

矩阵运算的另一个好处就是方便于求转置,求逆,求迹

>>> a
matrix([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
>>> a.T
matrix([[1, 4, 7],
    [2, 5, 8],
    [3, 6, 9]])
>>> a.H#共轭转置
matrix([[1, 4, 7],
    [2, 5, 8],
    [3, 6, 9]])
>>> b=np.eye(3)*3
>>> b
array([[3., 0., 0.],
    [0., 3., 0.],
    [0., 0., 3.]])
>>> b=np.mat(b)
>>> b.I#求逆运算
matrix([[0.33333333, 0.    , 0.    ],
    [0.    , 0.33333333, 0.    ],
    [0.    , 0.    , 0.33333333]])
>>> np.trace(b)#求迹运算
9.0

以上所述是小编给大家介绍的python中数组和矩阵乘法及使用总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
简单了解python协程的相关知识
Aug 31 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
python中os包的用法
Jun 01 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 #Python
python的内存管理和垃圾回收机制详解
May 18 #Python
Django处理多用户类型的方法介绍
May 18 #Python
Django 配置多站点多域名的实现步骤
May 17 #Python
将Python字符串生成PDF的实例代码详解
May 17 #Python
Python Django框架单元测试之文件上传测试示例
May 17 #Python
Python django框架应用中实现获取访问者ip地址示例
May 17 #Python
You might like
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python os模块在系统管理中的应用
2020/06/22 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
电子商务专业推荐信范文
2013/12/02 职场文书
教师校本培训方案
2014/02/26 职场文书
护士实习求职信
2014/06/22 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
少先队中队工作总结
2015/08/14 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
golang内置函数len的小技巧
2021/07/25 Golang