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 相关文章推荐
浅谈django中的认证与登录
Oct 31 Python
python读写json文件的简单实现
Apr 11 Python
python学习教程之使用py2exe打包
Sep 24 Python
Selenium控制浏览器常见操作示例
Aug 13 Python
python实现梯度下降算法
Mar 24 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
python实现飞船大战
Apr 24 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
vscode调试django项目的方法
Aug 06 Python
OpenCV读取与写入图片的实现
Oct 13 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 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
星际争霸中的热键
2020/03/04 星际争霸
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python读取网页内容的方法
2015/07/30 Python
详解Python中dict与set的使用
2015/08/10 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
Python创建自己的加密货币的示例
2021/03/01 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
《三亚落日》教学反思
2014/04/26 职场文书
拉贝日记观后感
2015/06/05 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫