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 相关文章推荐
Python 初始化多维数组代码
Sep 06 Python
python实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
PyQt5显示GIF图片的方法
Jun 17 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
python 求定积分和不定积分示例
Nov 20 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
python des,aes,rsa加解密的实现
Jan 16 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 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
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
大学生军训自我评价分享
2013/11/09 职场文书
优秀党员获奖感言
2014/02/18 职场文书
詹天佑教学反思
2014/04/30 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
财务工作失误检讨书
2015/02/19 职场文书
项目战略合作意向书
2015/05/08 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
Golang ort 中的sortInts 方法
2022/04/24 Golang