numpy基础知识

numpy基础知识


在python中有一种数据格式,如同list,dic,tuple,一样,ndarray叫做n维数组也可以叫做矩阵,一维数组的话就是列表。

ndarray创建

除了np.linspace()只可以创建一维数组外,其他均可以创建一维或多维数组。

由list创建
n1 = np.array([1,2,3,4])
n1
array([1, 2, 3, 4])
n2 = np.array([[1,2,3,4],[3,4,5,6]])
n2
array([[1, 2, 3, 4],
       [3, 4, 5, 6]])
n2.shape
(2, 4)
n3 = np.array(list('ABC'))
n3
array(['A', 'B', 'C'], dtype='<U1')
使用np.routines函数创建
  1. np.ones(shape, dtype=None, order=‘C’)

    np.ones((8,10),dtype=int)
    

    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, 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],
    [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, 1, 1, 1, 1, 1]])

  2. np.zeros(shape, dtype=None, order=‘C’)

  3. np.full(shape, fill_value,dtype=None, order=‘C’)

    np.full((19,10),fill_value=1024)
    
     array([[1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024],
            [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024]])
    
  4. np.eye() 满秩矩阵

    np.eye(10)
    
     array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
            [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
            [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
            [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
            [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
            [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
            [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
    
  5. np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 一维

    # lin = linear 线性
    np.linspace(0,100,50)
    
     array([  0.        ,   2.04081633,   4.08163265,   6.12244898,
              8.16326531,  10.20408163,  12.24489796,  14.28571429,
             16.32653061,  18.36734694,  20.40816327,  22.44897959,
             24.48979592,  26.53061224,  28.57142857,  30.6122449 ,
             32.65306122,  34.69387755,  36.73469388,  38.7755102 ,
             40.81632653,  42.85714286,  44.89795918,  46.93877551,
             48.97959184,  51.02040816,  53.06122449,  55.10204082,
             57.14285714,  59.18367347,  61.2244898 ,  63.26530612,
             65.30612245,  67.34693878,  69.3877551 ,  71.42857143,
             73.46938776,  75.51020408,  77.55102041,  79.59183673,
             81.63265306,  83.67346939,  85.71428571,  87.75510204,
             89.79591837,  91.83673469,  93.87755102,  95.91836735,
             97.95918367, 100.        ])
    
  6. arange([start,] stop[, step,], dtype=None) 一维 左闭又开

    np.arange(0,100,2)
    
     array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
            34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66,
            68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98])
    
  7. randint(low, high=None, size=None, dtype=‘l’)

    np.random.randint(0,100,size=10)
    

    array([34, 67, 47, 0, 32, 65, 60, 7, 29, 9])

  8. randn(d0, d1, …, dn) 标准正太分布

    np.random.randn(100)
    
     array([ 9.29583638e-01, -2.40494012e-01, -1.54880085e+00, -1.18131506e-01,
            -3.87412316e-01, -1.23791256e+00,  2.46981545e+00,  1.04596385e+00,
             5.11005626e-01,  3.95014962e-04,  6.36618463e-01,  5.99536203e-01,
             5.08082464e-01,  1.34371861e-01,  1.63049022e+00,  5.15438536e-01,
             9.79886535e-01, -1.03343210e+00, -1.78752211e+00,  1.59892428e-01,
             6.62543692e-01, -1.83891805e-01,  2.36549373e-01, -1.43428794e+00,
            -1.30311506e+00,  2.18125721e+00, -7.48955299e-01, -2.20360371e+00,
             5.14008608e-01, -8.08925384e-01,  5.59930463e-01,  1.70078574e-02,
            -5.53738914e-01,  4.54157169e-01,  1.23390498e+00, -1.19633192e-02,
             1.21316312e+00, -7.74635594e-01, -4.99006315e-01, -4.71089502e-01,
             3.91745177e-01,  1.25073473e+00,  5.99684476e-01,  7.79949784e-02,
            -1.53474734e+00, -1.30015440e+00, -9.93332385e-01, -6.84729883e-02,
             6.17898276e-01,  1.55839295e-01, -9.74375340e-01,  1.29065509e+00,
             2.02523710e-01, -8.36991477e-01,  3.78974117e-01, -1.08292565e+00,
            -1.09468011e+00, -1.22314953e+00,  1.92083860e+00,  3.95360086e-01,
             7.53084724e-01,  9.47536876e-01,  8.45936325e-01,  1.20138434e+00,
             3.75788241e-01,  8.44851316e-01,  3.33716508e-01,  8.15823029e-01,
            -1.54211905e+00, -1.04696822e-01,  3.33022185e-01,  2.55936392e-01,
            -5.79156621e-01, -9.79757391e-01, -1.36913066e+00,  1.49904805e+00,
             1.62805561e-02, -1.66471605e-01,  8.16514334e-01,  1.03849912e+00,
             8.42648986e-01,  5.54344315e-01,  8.63057027e-02,  4.79845157e-01,
             3.09233311e-01,  1.23818725e+00, -1.40764063e-01, -1.40356641e+00,
             1.50714791e+00,  9.12485068e-01,  2.62313182e-01, -7.37704901e-01,
            -5.67301131e-01,  1.31855866e+00,  8.41198925e-01, -1.12843622e+00,
            -1.02621887e+00,  2.09696491e+00, -1.79763991e+00,  5.19901822e-02])
    
  9. normal(loc=0.0, scale=1.0, size=None) 正太分布

    np.random.normal(loc=175,scale=10,size =15)
    
     array([182.04372848, 172.45799599, 175.38835881, 184.93946606,
            186.82865998, 167.56207879, 174.47448983, 186.65189832,
            167.08682158, 179.22340266, 156.89027635, 164.98120485,
            169.14664295, 184.92902583, 185.06685415])
    
  10. np.random.random(size=None) 生成0到1的随机数,左闭右开

    np.random.random(size=10)
    
    array([0.14184352, 0.32602578, 0.84404475, 0.08115584, 0.16118511,
           0.01345415, 0.68656484, 0.82920519, 0.46515306, 0.47630647])
    
    np.random.random(size=(50,50,3))
    # jpg 0-255 png 0-1
    
    array([[[0.77510855, 0.50431834, 0.58172162],
            [0.57190224, 0.64931629, 0.32118527],
            [0.00307274, 0.82749747, 0.98918687],
            ...,
            [0.90989473, 0.73828561, 0.73308725],
            [0.918006  , 0.37265469, 0.24465164],
            [0.88188722, 0.69745182, 0.14236788]],
    
           [[0.52146927, 0.96813976, 0.5218978 ],
            [0.61156258, 0.86086399, 0.0451758 ],
            [0.65282898, 0.21852094, 0.76603791],
            ...,
            [0.71680171, 0.22700938, 0.93433831],
            [0.79490029, 0.91488167, 0.85724234],
            [0.08631442, 0.09735808, 0.92812032]],
    
           [[0.68081873, 0.86206135, 0.42196991],
            [0.29429977, 0.06776767, 0.22277872],
            [0.09108285, 0.6356439 , 0.08196635],
            ...,
            [0.65212634, 0.89255668, 0.70723804],
            [0.99733278, 0.27508517, 0.12980421],
            [0.84525588, 0.94974487, 0.23050974]],
    
           ...,
    
           [[0.90531625, 0.00730948, 0.9003953 ],
            [0.11805442, 0.53721121, 0.5795969 ],
            [0.57738025, 0.80763817, 0.66423375],
            ...,
            [0.08165169, 0.1041306 , 0.97073386],
            [0.00932823, 0.98676353, 0.79321102],
            [0.7890455 , 0.5781148 , 0.28296647]],
    
           [[0.41889841, 0.19609236, 0.03216445],
            [0.1571943 , 0.85340774, 0.67519321],
            [0.90793631, 0.02364244, 0.63334361],
            ...,
            [0.95559939, 0.99922986, 0.16202791],
            [0.45739639, 0.11240036, 0.32076863],
            [0.93038134, 0.98131301, 0.00379627]],
    
           [[0.89344184, 0.6739045 , 0.18309083],
            [0.89895386, 0.81434073, 0.91353009],
            [0.4531639 , 0.22220111, 0.92134242],
            ...,
            [0.96937656, 0.78791459, 0.30536668],
            [0.12994018, 0.63912652, 0.92764144],
            [0.09584946, 0.26743536, 0.75149513]]])
    

索引和切片方法同列表 左闭右开

n1 = np.random.randint(10,200,(3,4,5))
n1
array([[[ 52,  26, 183, 128, 175],
        [ 47,  41, 185,  83,  43],
        [173,  92, 150,  14, 104],
        [109,  69, 153,  27,  99]],

       [[ 17, 138, 193,  48,  47],
        [173, 147,  76, 193, 180],
        [149,  61,  45, 188, 175],
        [ 35, 157,  78, 197,  22]],

       [[160, 122,  16,  62,  36],
        [ 29, 168,  33,  14,  85],
        [100,  19,  49,  13,  75],
        [156, 155, 126, 170,  65]]])
n1[0,1:3,2]
array([185, 150])

数据反转:

n3 = np.arange(0,10,1)
n3
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 倒序
n3[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

变形

n3.shape
(10,)
np.reshape(a=n3,newshape=(2,5))
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
n1
array([[[ 52,  26, 183, 128, 175],
        [ 47,  41, 185,  83,  43],
        [173,  92, 150,  14, 104],
        [109,  69, 153,  27,  99]],

       [[ 17, 138, 193,  48,  47],
        [173, 147,  76, 193, 180],
        [149,  61,  45, 188, 175],
        [ 35, 157,  78, 197,  22]],

       [[160, 122,  16,  62,  36],
        [ 29, 168,  33,  14,  85],
        [100,  19,  49,  13,  75],
        [156, 155, 126, 170,  65]]])
n1.reshape((-1))
# reshape()参数可以为负,负多少都可以结果都是自动变为一维数组
array([ 52,  26, 183, 128, 175,  47,  41, 185,  83,  43, 173,  92, 150,
        14, 104, 109,  69, 153,  27,  99,  17, 138, 193,  48,  47, 173,
       147,  76, 193, 180, 149,  61,  45, 188, 175,  35, 157,  78, 197,
        22, 160, 122,  16,  62,  36,  29, 168,  33,  14,  85, 100,  19,
        49,  13,  75, 156, 155, 126, 170,  65])
n1 = np.random.randint(0,10,size=(3,4))
n1
array([[4, 6, 1, 8],
       [9, 6, 6, 9],
       [2, 8, 8, 9]])

及联

np.concatenate() axis默认为0 注意维度对应
np.concatenate((n1,n1))
array([[4, 6, 1, 8],
       [9, 6, 6, 9],
       [2, 8, 8, 9],
       [4, 6, 1, 8],
       [9, 6, 6, 9],
       [2, 8, 8, 9]])
np.concatenate((n1,n1),axis=1)
array([[4, 6, 1, 8, 4, 6, 1, 8],
       [9, 6, 6, 9, 9, 6, 6, 9],
       [2, 8, 8, 9, 2, 8, 8, 9]])
np.hstack() 与 np.vstack()

np.hstack() : horizontal 水平及联,可以降维
np.vstack() : vertical 垂直及联,升高维度

nn = np.arange(0,10,2)
nn1 = np.vstack(nn)
nn1
array([[0],
       [2],
       [4],
       [6],
       [8]])
np.hstack(nn1)
array([0, 2, 4, 6, 8])

切分

  • np.split
n5 = np.random.randint(0,150,size=(5,7))
n5
array([[ 81,  69, 128,  28,  13,   3,  95],
       [103,  99,  16,  11,  22, 118, 148],
       [  7,  26, 122,  47,  59,  18,  14],
       [142, 133, 113,  21,  45,  18,  23],
       [124,  56,  28, 118, 117,  71,  27]])
np.split(n5,(1,3))
[array([[ 81,  69, 128,  28,  13,   3,  95]]),
 array([[103,  99,  16,  11,  22, 118, 148],
        [  7,  26, 122,  47,  59,  18,  14]]),
 array([[142, 133, 113,  21,  45,  18,  23],
        [124,  56,  28, 118, 117,  71,  27]])]
np.split(n5,(1,3),axis=1)
[array([[ 81],
        [103],
        [  7],
        [142],
        [124]]), array([[ 69, 128],
        [ 99,  16],
        [ 26, 122],
        [133, 113],
        [ 56,  28]]), array([[ 28,  13,   3,  95],
        [ 11,  22, 118, 148],
        [ 47,  59,  18,  14],
        [ 21,  45,  18,  23],
        [118, 117,  71,  27]])]
n5
array([[ 81,  69, 128,  28,  13,   3,  95],
       [103,  99,  16,  11,  22, 118, 148],
       [  7,  26, 122,  47,  59,  18,  14],
       [142, 133, 113,  21,  45,  18,  23],
       [124,  56,  28, 118, 117,  71,  27]])

np.vsplit() : 在竖直方向切,切分的就是行
np.hsplit() : 在水平方向切,切分的就是列

np.vsplit(n5,(2,4))
[array([[ 81,  69, 128,  28,  13,   3,  95],
        [103,  99,  16,  11,  22, 118, 148]]),
 array([[  7,  26, 122,  47,  59,  18,  14],
        [142, 133, 113,  21,  45,  18,  23]]),
 array([[124,  56,  28, 118, 117,  71,  27]])]
np.hsplit(n5,(2,3))
[array([[ 81,  69],
        [103,  99],
        [  7,  26],
        [142, 133],
        [124,  56]]), array([[128],
        [ 16],
        [122],
        [113],
        [ 28]]), array([[ 28,  13,   3,  95],
        [ 11,  22, 118, 148],
        [ 47,  59,  18,  14],
        [ 21,  45,  18,  23],
        [118, 117,  71,  27]])]

副本

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

# 列表不是ndarray
l = list("SASFdsaf")
l
['S', 'A', 'S', 'F', 'd', 's', 'a', 'f']
n = np.array(l)
n
array(['S', 'A', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n[1] = 'a'
n
array(['S', 'a', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
l
['S', 'A', 'S', 'F', 'd', 's', 'a', 'f']
n1 = n
n1[1] = 2
n1
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
创建副本使用 np.copy()
n3 = n1.copy()
n3
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n3[0] = 1
n3
array(['1', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n1
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')

ndarray的聚合操作

https://www.jianshu.com/p/653689096012

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值