在前面的课程中我们提到过使用NumPy能够非常便捷的进行一些运算,从本节课开始我们将会逐渐的对这些运算进行深入的学习。
在以前,我们如果要对两个同形状的数组进行对应位置的四则运算时,我们必须要对两个数组进行循环处理,代码量上来说并不少,并且容易出错。
有了NumPy之后,这些运算将会变的非常的简单。
四则运算
先回顾下Python中有哪些算数运算符吧。

老规矩,先上一段代码,然后再对着代码进行讲解。
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
36import numpy as np arr1=np.array([11,12,13]) arr2=np.array([21,22,23]) arr3=np.array([31,32,33]) #Numpy四则运算有两种方法 #第一种就是使用数学操作符号 print(arr1+arr2) print(arr1+arr2+arr3) print(arr1-arr2) print(arr1-arr2-arr3) print(arr1*arr2) print(arr1/arr2) #第二种就是使用以下方法 print(np.add(arr1,arr2)) print(np.add(np.add(arr1,arr2),arr3)) print(np.subtract(arr1,arr2)) print(np.multiply(arr1,arr2)) print(np.divide(arr1,arr2)) 结果为: [32 34 36] [63 66 69] [-10 -10 -10] [-41 -42 -43] [231 264 299] [0.52380952 0.54545455 0.56521739] [32 34 36] [63 66 69] [-10 -10 -10] [231 264 299] [0.52380952 0.54545455 0.56521739]
除了四则运算,在学习Python基础时,所学习的取余数、整除、幂运算等都是支持的。
对应的运算符号就是%、//、**。可以自己试试哦。

下面我们要学习的知识点叫做比较运算
回顾下Python中有哪些比较运算符吧。
比较运算

我们依然是从代码中理解这些运算吧。
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
34import numpy as np arr1=np.array([11,12,13]) arr2=np.array([21,22,23]) #Numpy比较运算有两种方法 #第一种就是使用数学操作符号 print(arr1>arr2) print(arr1>=arr2) print(arr1<arr2) print(arr1<=arr2) print(arr1==arr2) print(arr1!=arr2) #第二种就是使用以下方法 print(np.greater(arr1,arr2)) print(np.greater_equal(arr1,arr2)) print(np.less(arr1,arr2)) print(np.equal(arr1,arr2)) print(np.not_equal(arr1,arr2)) 结果为: [False False False] [False False False] [ True True True] [ True True True] [False False False] [ True True True] [False False False] [False False False] [ True True True] [False False False] [ True True True]
从结果上看,运用比较运算符可以返回布尔类型的值,也就是True和False。
那我们什么时候会用到这样的运算呢?
第一种情况是从数组中查询满足条件的元素,第二种情况是根据判断的结果执行不同的操作。我们还是用代码来看一下具体是怎么一回事吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import numpy as np arr1=np.array([23,12,25]) arr2=np.array([21,15,23]) print(arr1[arr1>arr2]) print(arr1[arr1>24]) print(np.where(arr1>24,0,arr1)) print(np.where(arr2>16,1,0)) 结果为: [23 25] [25] [23 12 0] [1 0 1]
广播运算
你有可能注意到了一个细节,上面我们所有的运算都是基于相同形状的数组,那么当数组形状不同时,能够让它们之间进行运算吗
答案肯定是可以的啦,这种情况我们把它叫做广播运算。

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168以上代码的结果为: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[101 102 103 104] [105 106 107 108] [109 110 111 112]] 这里由于维度一致,所以没有用到广播运算: [[101 103 105 107] [109 111 113 115] [117 119 121 123]] ============================================================ 我是arr1:[[[ 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 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]]] 我是arr2:[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 维数不一致,但是末尾的维度值是一致的: [[[ 0 2 4] [ 6 8 10] [12 14 16] [18 20 22]] [[12 14 16] [18 20 22] [24 26 28] [30 32 34]] [[24 26 28] [30 32 34] [36 38 40] [42 44 46]] [[36 38 40] [42 44 46] [48 50 52] [54 56 58]] [[48 50 52] [54 56 58] [60 62 64] [66 68 70]]] ============================================================ 我是arr1:[[[ 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 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]]] 我是arr2:[[0] [1] [2] [3]] 维数不一致,维度值也不一致的,但维度值至少有一个为1: [[[ 0 1 2] [ 4 5 6] [ 8 9 10] [12 13 14]] [[12 13 14] [16 17 18] [20 21 22] [24 25 26]] [[24 25 26] [28 29 30] [32 33 34] [36 37 38]] [[36 37 38] [40 41 42] [44 45 46] [48 49 50]] [[48 49 50] [52 53 54] [56 57 58] [60 61 62]]] ============================================================ 我是arr1:[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 我是arr2:[1 2 3] arr2会自动补齐成为1行3列的数组进行运算: [[ 1 3 5] [ 4 6 8] [ 7 9 11] [10 12 14]] no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no=no= 我是arr1:[[[ 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 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]]] 我是arr2:[[0 1] [2 3] [4 5] [6 7]] --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-3-67f967cbb71b> in <module> 34 print("我是arr1:{}".format(arr1)) 35 print("我是arr2:{}".format(arr2)) ---> 36 print("不能做运算:n{}".format(arr1+arr2)) ValueError: operands could not be broadcast together with shapes (5,4,3) (4,2)
补充:在数学中,矩阵的维数就是矩阵的秩,矩阵的秩就是矩阵中非零子式的最高阶数。简单来说,就是把矩阵进行初等行变换之后有非零数的行数。

维数是对形状的描述,红框是维数是3,绿框维数是2,红框第一维的维度值是5,第二维的维度值是4以此类推。
最后
以上就是美好帅哥最近收集整理的关于幂运算 数组_Python数据分析--1.3NumPy中四则运算、四则比较运算和广播运算的全部内容,更多相关幂运算内容请搜索靠谱客的其他文章。
发表评论 取消回复