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中数组和矩阵乘法及使用总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“python中数组和矩阵乘法及使用总结(推荐)”评论...
更新动态
2025年11月07日
2025年11月07日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]