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()