zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    (AIDE)Android Eclipse JNI 调用 .so文件加载问题
    VMware10.06精简版安装后台运行
    RAID磁盘阵列笔记
    高科固定电话机铃声
    嵌入式Linux驱动学习之路(十八)LCD驱动
    嵌入式Linux驱动学习之路(十七)驱动程序分层分离概念-平台设备驱动
    嵌入式Linux驱动学习之路(十六)输入子系统
    嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
    嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞
    嵌入式Linux驱动学习之路(十三)按键驱动-异步通知
  • 原文地址:https://www.cnblogs.com/xshan/p/10046552.html
Copyright © 2011-2022 走看看