numpy的操作

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

 

posted @ 2018-11-30 21:17  xsan  阅读(331)  评论(0编辑  收藏  举报