欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

numpy的操作

程序员文章站 2022-05-18 22:44:47
1 import numpy as np 2 3 ######################## 4 # 索引 5 n1 = np.random.randint(0, 100, 10) 6 # print(n1) 7 ''' 8 [68 27 40 11 18 6 61 62 67 31] 9 '... ......
  1 import numpy as np
  2 
  3 ########################
  4 # 索引
  5 n1 = np.random.randint(0, 100, 10)
  6 # print(n1)
  7 '''
  8 [68 27 40 11 18  6 61 62 67 31]
  9 '''
 10 # print(n1[5])
 11 '''
 12 6
 13 '''
 14 n2 = np.random.randint(0, 100, (3, 4))  # 创建一个由0到100中随机产生的3行4列的随机数组
 15 # print(n2)
 16 '''
 17 [[46  5 20 78]
 18  [20  2 71 76]
 19  [27 71 19 39]]
 20 '''
 21 # print(n2[0, 1])  # 打印出来第0行的第2个元素
 22 '''
 23 5
 24 '''
 25 #############################
 26 # 切片操作
 27 n3 = np.random.randint(150, size=10)  # 创建一个由0到150的随机整数组成的元素个数为10的一维数组
 28 # print(n3)
 29 '''
 30 [ 41  72  15 121  55  76  65  10 101  77]
 31 '''
 32 # print(n3[1:3])  # 取出索引从1到2的值
 33 '''
 34 [72 15]
 35 '''
 36 n4 = np.random.randint(0, 100, (3, 4, 5))  # 创建一个3维数组
 37 # print(n4)
 38 '''
 39 [[[27 80 43 98 87]
 40   [96 99  2 41 86]
 41   [73 83 96 54 26]
 42   [10 76 87 53 47]]
 43 
 44  [[33 63 98 70 41]
 45   [82 29 80 92 72]
 46   [98 44 51 97 85]
 47   [23 33  2 10 49]]
 48 
 49  [[86 79 98 76 65]
 50   [42  4 29 38 90]
 51   [ 6 57 92 66 38]
 52   [36 58 25 43 53]]]
 53 '''
 54 # print(n4[1:3])
 55 '''
 56 [[[33 63 98 70 41]
 57   [82 29 80 92 72]
 58   [98 44 51 97 85]
 59   [23 33  2 10 49]]
 60 
 61  [[86 79 98 76 65]
 62   [42  4 29 38 90]
 63   [ 6 57 92 66 38]
 64   [36 58 25 43 53]]]
 65 '''
 66 # print(n4[1:3, 1:4])
 67 '''
 68 [[[82 29 80 92 72]
 69   [98 44 51 97 85]
 70   [23 33  2 10 49]]
 71 
 72  [[42  4 29 38 90]
 73   [ 6 57 92 66 38]
 74   [36 58 25 43 53]]]
 75 '''
 76 # print(n4[1:3, 1:4, 1:4])
 77 '''
 78 [[[29 80 92]
 79   [44 51 97]
 80   [33  2 10]]
 81 
 82  [[ 4 29 38]
 83   [57 92 66]
 84   [58 25 43]]]
 85 '''
 86 ###############################
 87 # 变形
 88 n5 = np.random.randint(0, 100, (3, 4))
 89 # print(n5)
 90 '''
 91 [[78 85 94 85]
 92  [16 67 88 71]
 93  [80 12 13 10]]
 94 '''
 95 n6 = n5.reshape(4, 3)
 96 # print(n6)
 97 '''
 98 [[78 85 94]
 99  [85 16 67]
100  [88 71 80]
101  [12 13 10]]
102 '''
103 ## reshape和resize的区别
104 a = np.array([(1, 2, 3), (4, 5, 6)])
105 b = a.reshape(3, 2)
106 # print(b)
107 '''
108 [[1 2]
109  [3 4]
110  [5 6]]
111  将a数组的数据由2行3列变成3行2列得到b数组,但是a数组没有发生改变
112  '''
113 a.resize(3, 2)
114 # print(a)
115 '''
116 [[1 2]
117  [3 4]
118  [5 6]]
119  a数组由2行3列变成3行2列,此时,a数组的形状发生了改变
120  '''
121 # 多维数组降成一维
122 # print(n6.shape)
123 '''
124 (4, 3)
125 '''
126 n7 = n6.reshape(4 * 3)
127 # print(n7)
128 '''
129 [23 65 78 78 85 11 44 69 85 10 11 43]
130 '''
131 n8 = n6.reshape(-1)
132 # print(n8)
133 '''
134 [23 65 78 78 85 11 44 69 85 10 11 43]
135 '''
136 ###############################
137 # 级联(将两个数组连在一起)
138 '''
139 注意:1、级联的参数必须是列表:一定要加中括号或小括号
140       2、维度必须相同
141       3、形状相符
142       4、【重点】级联的方向默认是shape这个元组的第一个值所代表的维度方向
143       5、可以通过axis参数改变级联的方向
144 '''
145 n9 = np.random.randint(0, 10, size=(5, 5))  # 创建一个由0到10的正整数的随机数生成的5行5列的随机数组
146 # print(n9)
147 '''
148 [[7 1 9 3 0]
149  [7 0 9 3 0]
150  [2 1 4 0 6]
151  [0 8 2 8 3]
152  [6 8 8 4 4]]
153 '''
154 n10 = np.concatenate((n9, n9))  # 横着级联
155 # print(n10)
156 '''
157 [[7 1 9 3 0]
158  [7 0 9 3 0]
159  [2 1 4 0 6]
160  [0 8 2 8 3]
161  [6 8 8 4 4]
162  [7 1 9 3 0]
163  [7 0 9 3 0]
164  [2 1 4 0 6]
165  [0 8 2 8 3]
166  [6 8 8 4 4]]
167 '''
168 n11 = np.concatenate((n9, n9), axis=0)  # 竖着级联
169 # print(n11)
170 '''
171 [[7 1 9 3 0]
172  [7 0 9 3 0]
173  [2 1 4 0 6]
174  [0 8 2 8 3]
175  [6 8 8 4 4]
176  [7 1 9 3 0]
177  [7 0 9 3 0]
178  [2 1 4 0 6]
179  [0 8 2 8 3]
180  [6 8 8 4 4]]
181 '''
182 n12 = np.concatenate((n9, n9), axis=1)  # 横着级联
183 # print(n12)
184 '''
185 [[7 1 9 3 0 7 1 9 3 0]
186  [7 0 9 3 0 7 0 9 3 0]
187  [2 1 4 0 6 2 1 4 0 6]
188  [0 8 2 8 3 0 8 2 8 3]
189  [6 8 8 4 4 6 8 8 4 4]]
190 '''
191 n13 = np.array([
192     (1, 2, 3),
193     (7, 8, 9)
194 ], dtype=int)
195 # print(n13)
196 '''
197 [[1 2 3]
198  [7 8 9]]
199 '''
200 n14 = np.hstack(n13)  # 将多维数组进行水平级联,处理自己进行维度变更
201 # print(n14)
202 '''
203 [1 2 3 7 8 9]
204 '''
205 n15 = np.vstack(n14)  # 将一维数组进行垂直级联,处理自己进行维度变更
206 # print(n15)
207 '''
208 [[1]
209  [2]
210  [3]
211  [7]
212  [8]
213  [9]]
214 '''
215 n16 = np.array([[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]])
216 # print(n16)
217 #################################
218 # 切分
219 '''
220 与级联类似,三个函数完成切分工作:
221 1、np.split
222 2、np.vsplit
223 3、np.hsplit
224 '''
225 n17 = np.random.randint(0, 150, size=(5, 7))
226 # print(n17)
227 n18 = np.split(n17, (1, 3))  # 按行切割数组,此处是分别在行号为1和3前切割
228 n19 = np.split(n17, (1, 3), axis=0)  # 和n18的操作一样
229 # print(n18)
230 #####################################
231 # 副本
232 '''
233 所有赋值运算不会为ndarray的任何元素创建副本。赋值后的对象的操作也对原来的对象生效。
234 '''
235 n20 = np.random.randint(0, 100, (3, 4))
236 # print(n20)
237 '''
238 [[ 8 83 57 15]
239  [81 61  0  0]
240  [56 88 73 91]]
241 '''
242 n21 = n20  # 此时,n21和n20是完全相同,并且两者是有联系的。对n21操作的同时也对n22操作了。实际上是两者的指针指向了同一块内存地址
243 n21[2, 3] = 500
244 # print(n21)
245 '''
246 [[  8  83  57  15]
247  [ 81  61   0   0]
248  [ 56  88  73 500]]
249 '''
250 # print(n20)
251 '''
252 [[  8  83  57  15]
253  [ 81  61   0   0]
254  [ 56  88  73 500]]
255 '''
256 n22 = np.array([[8, 83, 57, 15],
257                 [81, 61, 0, 0],
258                 [56, 88, 73, 91]])
259 n23 = n22.copy()  # 此时n23为n22的副本,与n22完全分隔开了,对n23操作不会影响到n22。实际上是,在内存中新建了一个地方,把n22的值存放在里面,同时n23的指针也指向了新的地址,而n22任然指向原先的。
260 n23[1, 2] = 500
261 # print(n23)
262 '''
263 [[  8  83  57  15]
264  [ 81  61 500   0]
265  [ 56  88  73  91]]
266 '''
267 # print(n22)
268 '''
269 [[ 8 83 57 15]
270  [81 61  0  0]
271  [56 88 73 91]]
272 '''
273 ##数组的计算
274 a = np.array([1, 2, 3])
275 b = np.array([4, 5, 6])
276 # 加法
277 c = a + b
278 print(c)
279 '''
280 [5 7 9]
281 '''
282 # 减法
283 d = a - b
284 print(d)
285 '''
286 [-3 -3 -3]
287 '''
288 # 乘法
289 e = a * b
290 print(e)
291 '''
292 [ 4 10 18]
293 '''
294 # 求和
295 f = np.array([(1, 2, 3), (4, 5, 6)])
296 print(f.sum())
297 '''
298 21
299 '''
300 # 按列求和
301 print(f.sum(axis=0))
302 '''
303 [5 7 9]
304 '''
305 # 按行求和
306 print(f.sum(axis=1))
307 '''
308 [ 6 15]
309 '''
310 # 最小值的值
311 print(f.min())
312 '''
313 1
314 '''
315 # 最小值的索引
316 print(f.argmin())
317 '''
318 0
319 '''
320 # 最大值的值
321 print(f.max())
322 '''
323 6
324 '''
325 print(f.argmax())
326 '''
327 5
328 '''
329 # 平均值
330 print(f.mean())
331 '''
332 3.5
333 '''
334 # 方差
335 print(f.var())
336 '''
337 2.9166666666666665
338 '''
339 # 标准差
340 print(f.std())
341 '''
342 1.707825127659933
343 '''
344 #############
345 # 线性代数的运算
346 # 矩阵内积
347 np.dot()
348 # 行列式
349 np.linalg.det()
350 # 逆矩阵
351 np.linalg.inv()
352 # 多元一次方程组求根
353 np.linalg.solve()
354 # 求特征值和特征向量
355 np.linalg.eig()