黑松山资源网 Design By www.paidiu.com
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中数组和矩阵乘法及使用总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
黑松山资源网 Design By www.paidiu.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
黑松山资源网 Design By www.paidiu.com
暂无评论...
更新日志
2024年10月07日
2024年10月07日
- 张宇.2001-替身【EMI百代】【WAV+CUE】
- 班得瑞原装进口《第六张新世纪专辑:日光海岸》1CD[APE/CUE分轨][339.5MB]
- 班得瑞原装进口《第七张新世纪专辑:梦花园》1CD[APE/CUE分轨][331.4MB]
- 班得瑞原装进口《第八张新世纪专辑:琉璃湖畔》1CD[APE/CUE分轨][286.4MB]
- 魏如萱.2011-在哪里(EP)【添翼创越】【WAV+CUE】
- 群星.1981-新金曲奖·青年创作园地12合辑(喜玛拉雅复刻版)【歌林】【WAV+CUE】
- 麦洁文.1989-新曲与精丫新艺宝】【WAV+CUE】
- SNH48《薄荷糖 (Mint Candy)》[320K/MP3][33.72MB]
- SNH48《薄荷糖 (Mint Candy)》[FLAC/分轨][78.59MB]
- 刘美麟《同生》[320K/MP3][70.99MB]
- 群星.1994-宝丽金最流行3CD【宝丽金】【WAV+CUE】
- 群星.2024-聆听“某某”影视原声带【华纳】【FLAC分轨】
- 陈慧娴.1989-永远是你的朋友(2024环球MQA-UHQCD限量版)【环球】【WAV+CUE】
- 何洛洛.2024-别叫醒我(EP)【光羽】【FLAC分轨】
- 林忆莲.1996-爱莲说2CD【华纳】【WAV+CUE】