• numpy的使用


    numpy的使用

    一、创建ndarray

    1. 使用np.array()由python list创建

    注意:

    • numpy默认ndarray的所有元素的类型是相同的
    • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
    import numpy as np
    
    l = [1,2,3,4,5,6,7]
    print(type(l))  # list
    
    nd = np.array(l)
    print(type(nd))  # numpy.ndarray
    
    1. 求和

      nd.sum()
      
    2. 求均方差

      nd.var()
      
    3. 求标准差

      nd.std()
      
    4. 随机数生成

      x = np.arange(0,100000,1)
      print(x)  # array([    0,     1,     2, ..., 99997, 99998, 99999])
      

    2. 使用np的routines函数创建

    1. np.ones(shape, dtype=None, order='C')  # shape 形状 dtype 数据类型
      
      x = np.ones(shape = (5,5),dtype=np.int8)
      print(x)
      # array([[1, 1, 1, 1, 1],
      #       [1, 1, 1, 1, 1],
      #       [1, 1, 1, 1, 1],
      #       [1, 1, 1, 1, 1],
      #       [1, 1, 1, 1, 1]], dtype=int8)
      
    2. np.zeros(shape, dtype=float, order='C')
      
      x = np.zeros(shape = (2,3,4),dtype=np.float16)
      print(x)
      #array([[[0., 0., 0., 0.],
      #        [0., 0., 0., 0.],
      #        [0., 0., 0., 0.]],
      #
      #       [[0., 0., 0., 0.],
      #        [0., 0., 0., 0.],
      #        [0., 0., 0., 0.]]], dtype=float16)
      
    3. np.full(shape, fill_value, dtype=None, order='C')
      
      x = np.full(shape = (3,5),fill_value=3.14)
      print(x)
      #array([[3.14, 3.14, 3.14, 3.14, 3.14],
      #       [3.14, 3.14, 3.14, 3.14, 3.14],
      #       [3.14, 3.14, 3.14, 3.14, 3.14]])
      
    4. np.eye(N, M=None, k=0, dtype=float)  
      # 对角线为1其他的位置为0
      
      # 单位矩阵
      x = np.eye(N = 5)
      print(x)
      #array([[1., 0., 0., 0., 0.],
      #       [0., 1., 0., 0., 0.],
      #       [0., 0., 1., 0., 0.],
      #       [0., 0., 0., 1., 0.],
      #       [0., 0., 0., 0., 1.]])
      
    5. np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
      
      # 等差数列
      np.linspace(0,100,num = 21)
      #array([  0.,   5.,  10.,  15.,  20.,  25.,  30.,  35.,  40.,  45.,  50.,
      #        55.,  60.,  65.,  70.,  75.,  80.,  85.,  90.,  95., 100.])
      
    6. np.arange([start, ]stop, [step, ]dtype=None)
      
      np.arange(0,100,3)
      #array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48,
      #       51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99])
      
    7. np.random.randint(low, high=None, size=None, dtype='l')
      
      np.random.randint(0,100,size = (5,5))
      #array([[ 4, 45, 66, 55, 42],
      #       [28,  5, 75, 71, 44],
      #       [ 0, 17, 89, 81, 66],
      #       [95, 96, 89, 31,  6],
      #       [75, 31, 51, 81, 38]])
      
    8. np.random.randn(d0, d1, ..., dn)  
      # 标准正态分布
      
      # normal 正常,正太
      # dimession 维度
      # 平均值是0,方差是1
      np.random.randn(4,5)
      #array([[-1.26185332,  0.29715466,  0.52047771, -1.55183841, -0.83663771],
      #       [ 0.40776138, -0.7380327 ,  0.22623508,  1.12275365, -0.38189704],
      #       [ 0.67816239,  0.91695635,  0.13487838,  0.13769114,  0.68426452],
      #       [ 0.00935704,  0.49087787, -0.34920945,  0.15688878, -0.98320155]])
      
    9. np.random.normal(loc=0.0, scale=1.0, size=None)
      
      np.random.normal(loc = 175,scale=10,size = 10000).round(2)
      #array([180.02, 162.26, 184.18, ..., 179.19, 182.83, 174.51])
      
    10. np.random.random(size=None)  
      # 生成0到1的随机数,左闭右开
      
      np.random.random(10)
      #array([0.80403643, 0.60631454, 0.22301424, 0.03813725, 0.14537585,
      #       0.00946211, 0.39063408, 0.5558176 , 0.39426771, 0.74874309])
      

    二、ndarray的属性

    4个必记参数:

    1. ndim:维度
    2. shape:形状(各维度的长度)
    3. size:总长度
    4. dtype:元素类型

    三、ndarray的基本操作

    1. 索引

    一维与列表完全一致,多维时同理

    nd2 = np.random.randint(0,150,size = (4,5))
    print(nd2)
    #array([[124,  91,  52,  23,  16],
    #       [122, 106, 143,  88,  85],
    #       [100,   0, 141, 101,  72],
    #       [ 26,  93, 123,   4,  31]])
    
    nd2[1,1]  # 106
    nd2[2]  # array([100,   0, 141, 101,  72])
    

    2. 切片

    一维与列表完全一致,多维时同理

    nd2
    array([[124,  91,  52,  23,  16],
           [122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72],
           [ 26,  93, 123,   4,  31]])      
    nd2[0:3]
    array([[124,  91,  52,  23,  16],
           [122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72]])
    nd2[-2:]
    array([[100,   0, 141, 101,  72],
           [ 26,  93, 123,   4,  31]])
    nd2[0:3,0:3]
    array([[124,  91,  52],
           [122, 106, 143],
           [100,   0, 141]])
    
    • 将数据反转,例如[1,2,3]---->[3,2,1]

      nd3 = nd[:10]
      nd3
      array([189.04, 166.26, 172.39, 172.1 , 173.  , 176.82, 176.  , 177.74,
             162.46, 176.13])
      nd3[::-1]
      array([176.13, 162.46, 177.74, 176.  , 176.82, 173.  , 172.1 , 172.39,
             166.26, 189.04])
      ## 两个::进行切片
      

    3. 变形

    使用reshape函数,注意参数是一个tuple!

    nd2
    array([[124,  91,  52,  23,  16],
           [122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72],
           [ 26,  93, 123,   4,  31]])
    nd2.reshape(2,10)
    array([[124,  91,  52,  23,  16, 122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72,  26,  93, 123,   4,  31]])
    nd2.reshape(5,4)
    array([[124,  91,  52,  23],
           [ 16, 122, 106, 143],
           [ 88,  85, 100,   0],
           [141, 101,  72,  26],
           [ 93, 123,   4,  31]])
    

    4. 级联

    1. np.concatenate()级联需要注意的点:
      • 级联的参数是列表:一定要加中括号或小括号
      • 维度必须相同
      • 形状相符
      • 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
      • 可通过axis参数改变级联的方向
    nd2
    array([[124,  91,  52,  23,  16],
           [122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72],
           [ 26,  93, 123,   4,  31]])
    np.concatenate([nd2,nd2])
    array([[124,  91,  52,  23,  16],
           [122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72],
           [ 26,  93, 123,   4,  31],
           [124,  91,  52,  23,  16],
           [122, 106, 143,  88,  85],
           [100,   0, 141, 101,  72],
           [ 26,  93, 123,   4,  31]])
    
    1. np.hstacknp.vstack水平级联与垂直级联,处理自己,进行维度的变更

      nd1 = np.random.randint(0,150,size = (4,5))
      
      nd2 = np.random.randint(0,150,size = (2,5))
      
      nd3 = np.random.randint(0,150,size = (4,8))
      
      display(nd1,nd2,nd3)
      
      array([[ 64,  14, 132,   3,  19],
             [ 42,  79,  61, 142,  48],
             [ 38,  93, 149, 120,  36],
             [ 21,   6,  98,  67,  38]])
      array([[113,  15,   9,  31,  22],
             [  3,  94,  60, 116,  79]])
      array([[137,  13, 104,   7,  43, 136, 147,  12],
             [ 19,  36,  98,  39,  72,  38,  47, 128],
             [ 89, 149, 123, 149,  20,  73,  81,   6],
             [100,   6, 138, 127, 104,  28,  31,  61]])
      
      # horizontal 水平的,列数增加
      nd5 = np.hstack((nd1,nd3))
      
      # vertical 竖直方向增多,行数增多
      nd4 = np.vstack((nd1,nd2))
      

    5. 切分

    与级联类似,三个函数完成切分工作:

    • np.split 切分

      nd4
      array([[ 64,  14, 132,   3,  19],
             [ 42,  79,  61, 142,  48],
             [ 38,  93, 149, 120,  36],
             [ 21,   6,  98,  67,  38],
             [113,  15,   9,  31,  22],
             [  3,  94,  60, 116,  79]])
      
      np.split(nd4,indices_or_sections=3)
      [array([[ 64,  14, 132,   3,  19],
              [ 42,  79,  61, 142,  48]]),
       array([[ 38,  93, 149, 120,  36],
              [ 21,   6,  98,  67,  38]]),
       array([[113,  15,   9,  31,  22],
              [  3,  94,  60, 116,  79]])]
      
      np.split(nd4,indices_or_sections=[1,3])
      [array([[ 64,  14, 132,   3,  19]]),
       array([[ 42,  79,  61, 142,  48],
              [ 38,  93, 149, 120,  36]]),
       array([[ 21,   6,  98,  67,  38],
              [113,  15,   9,  31,  22],
              [  3,  94,  60, 116,  79]])]
      
    • np.vsplit 竖直轴切分

      np.vsplit(nd4,indices_or_sections=2)
      [array([[ 64,  14, 132,   3,  19],
              [ 42,  79,  61, 142,  48],
              [ 38,  93, 149, 120,  36]]),
       array([[ 21,   6,  98,  67,  38],
              [113,  15,   9,  31,  22],
              [  3,  94,  60, 116,  79]])]
      
    • np.hsplit 水平轴切割

      nd5
      array([[ 2, 47, 19, 21, 27],
             [21, 66, 29, 86, 48],
             [12, 78, 87, 82, 90],
             [87, 21,  3, 56, 78],
             [ 7, 18,  8, 64, 95],
             [46,  2, 62, 36, 11]])
      
      np.hsplit(nd5,indices_or_sections=[3])
      [array([[ 2, 47, 19],
              [21, 66, 29],
              [12, 78, 87],
              [87, 21,  3],
              [ 7, 18,  8],
              [46,  2, 62]]),
       array([[21, 27],
              [86, 48],
              [82, 90],
              [56, 78],
              [64, 95],
      

    6. 副本

    所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。

    nd7 = nd5
    id(nd7)
    2174915628688
    id(nd5)
    2174915628688
    
    1. 可使用copy()函数创建副本

      nd8 = nd5.copy()
      id(nd8)
      2174923593888
      

    四、ndarray的聚合操作

    1. 求和np.sum

    2. 最大最小值:np.max/ np.min

  • 相关阅读:
    T4模板+Web.config连接SqlServer+DBManage.cs+DbHelper.cs
    MVCApplication
    MVC路由(Route)
    过滤器+用session验证是否登陆过
    前台.cshtml得到session值方法
    C++ sort() method with 1.default operator,2 stand library compare ,3custom function,4,lambda expression
    C++ boost serialize struct to text
    C++ multi thread via pthread to retrieve returned result
    C++ pthread create and join
    C++ write and read file via fstream in ios::out,ios::in,ios::app mode
  • 原文地址:https://www.cnblogs.com/techoc/p/13428182.html
Copyright © 2020-2023  润新知