侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   296

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]])>>> aarray([[1, 2, 3],    [4, 5, 6],    [7, 8, 9]])>>> b=a.copy()>>> barray([[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])#构造一行三列的数组>>> carray([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)>>> darray([[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)>>> amatrix([[1, 2, 3],    [4, 5, 6],    [7, 8, 9]])>>> b=a>>> bmatrix([[1, 2, 3],    [4, 5, 6],    [7, 8, 9]])>>> a+b#矩阵的加减运算和数组运算一致matrix([[ 2, 4, 6],    [ 8, 10, 12],    [14, 16, 18]])>>> a-bmatrix([[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*amatrix([[ 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])#构造一行三列数组>>> carray([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)>>> carray([[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)

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

>>> amatrix([[1, 2, 3],    [4, 5, 6],    [7, 8, 9]])>>> a.Tmatrix([[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>>> barray([[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中数组和矩阵乘法及使用总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!


  • 上一条:
    Python3匿名函数lambda介绍与使用示例
    下一条:
    Python实现二叉树前序、中序、后序及层次遍历示例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客