gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 35 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python中数组和矩阵乘法及使用总结(推荐)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

matrix是array的一个小的分支,包含于array。所以matrix 拥有array的所有特性.

但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积 。

如果a,b是数组的话,则a*b是数组的运算 。

1.对数组的操作 。

?
1
>>> import numpy as np
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
>>> 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.对矩阵的操作 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
>>> 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 )

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> 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中数组和矩阵乘法及使用总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:https://blog.csdn.net/manjhOK/article/details/80017892

最后此篇关于python中数组和矩阵乘法及使用总结(推荐)的文章就讲到这里了,如果你想了解更多关于python中数组和矩阵乘法及使用总结(推荐)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com