python中数组和矩阵乘法及使用总结(推荐)
Matrix是Array的一个小的分支,包含于Array。所以matrix拥有array的所有特性。
但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积
如果a,b是数组的话,则a*b是数组的运算
1.对数组的操作
>>>importnumpyasnp
>>>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(mostrecentcalllast): File"",line1,in np.dot(d,a) ValueError:shapes(3,1)and(3,3)notaligned:1(dim1)!=3(dim0)
对于数组的转置,求逆,求迹运算请参考上篇文章
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(mostrecentcalllast): File"",line1,in a*c File"F:\python3\anzhuang\lib\site-packages\numpy\matrixlib\defmatrix.py",line309,in__mul__ returnN.dot(self,asmatrix(other)) ValueError:shapes(3,3)and(1,3)notaligned:3(dim1)!=1(dim0) >>>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(mostrecentcalllast): File" ",line1,in c*a ValueError:shapes(3,1)and(3,3)notaligned:1(dim1)!=3(dim0)
矩阵运算的另一个好处就是方便于求转置,求逆,求迹
>>>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中数组和矩阵乘法及使用总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。