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