数据科学三基友之Numpy

作者: 可乐还是百事好 | 来源:发表于2018-11-07 16:43 被阅读424次

    NumPy是Python语言的一个扩充程序库 ,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。numpy以及依赖它产生的pandas广泛运用于数据分析和机器学习。

    Numpy创建数据:

    import numpy as np
    
    list_1  = [1,2,3]
    array_1 = np.array([1,2,3],dtype='int')
    print(array_1)
    >>>[1 2 3]
    
    #多维度
    list_2  = [[1,2],[3,4]]
    array_2 = np.array(list_2)
    print(array_2)
    >>>[[1 2]
        [3 4]]
    

    Numpy中的数组和列表有些相似之处 ,数组有多个维度 。dtype为可选参数 ,修饰数组内结构

    Numpy创建N维数组的api函数

    import numpy as np
    
    array_3 = np.array([1,2,3,4,5,6,7,8,9]).reshape((3,3))
    print(array_3)
    
    >>>[[1 2 3]
        [4 5 6]
        [7 8 9]]
    
    array_4 = np.ones([5,5])
    print(array_4)
    
    >>>[[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.]]
    
    array_5 = np.zeros([5,5])
    print(array_5)
    
    >>>[[0. 0. 0. 0. 0.]
        [0. 0. 0. 0. 0.]
        [0. 0. 0. 0. 0.]
        [0. 0. 0. 0. 0.]
        [0. 0. 0. 0. 0.]]
    
    array_6 = np.random.randint(0,10,(4,3))
    print(array_6)
    
    >>>[[3 8 3]
        [1 2 2]
        [1 8 4]
        [1 4 8]]
    

    .reshape可以规定数组的维度 :(m,n)m行n列 。ones填充数组所有元素为1 ,zeros填充数组所有元素为0 。random.randint(0,10,(4,3)) 函数随机生成(0,10)四行三列数组。

    Numpy的索引与切片:

    array_7 = np.random.randint(0,10,(5,5))
    print(array_7)
    print(array_7[2,:])  #第三行所有元素
    print(array_7[:,2])  #第三列所有元素
    print(array_7[2,2])  #第三行第三列的元素
    
    print(array_7[2,1:3])    #第三行的二到三列所有元素
    print(array_7[1:3,2])    #第二到三行的三列所有元素
    print(array_7[1:3,1:3])  #第二到三行的二到三列所有元素
    >>>
    [[3 5 9 0 4]       
     [0 3 0 7 9]
     [0 4 3 0 7]
     [9 8 4 0 5]
     [3 0 8 8 5]]
    
    [0 4 3 0 7]
    [9 0 3 4 8]
    3
    [4 3]
    [0 3]
    [[3 0]
     [4 3]]
    

    Numpy的计算

    便于我们更好的理解Numpy的计算 ,这里我们引入一个实例 :四六级成绩 给出一个list ,有四位同学的四六级成绩 。对于四级没过的同学 ,这里的六级成绩我们取0。

    取出score的value ,重新组合为新的列表 然后,将数组转为array。

    scroe = [{'老王':[444,369]},{'三毛':[333,0]},{'徐四':[578,496]},{'宝儿':[456,425]}]
    scroes = []
    for x in scroe:
    
        for key,value in x.items():
            scroes.append(value)
    print(scroes)
    array_8 = np.array(scroes)
    print(array_8)
    
    >>>[[444, 369], [333, 0], [578, 496], [456, 425]]
       [[444 369]
       [333   0]
       [578 496]
       [456 425]]
    

    条件运算:

    array_9 = np.array(scroes)
    print(array_9>425)                               #返回
    print(np.where(array_9 > 425, '合格', '不合格'))  #三目运算
    
    >>>[[ True False]
       [False False]
       [ True  True]
       [ True False]]
      [['合格' '不合格']
       ['不合格' '不合格']
       ['合格' '合格']
       ['合格' '不合格']]
    

    统计运算:

    result_max_1 = np.amax(array_9,axis=1)   #行内的最大值      
    result_max_2 = np.amax(array_9,axis=0)   #列内的最大值
    print(result_max_1)
    print(result_max_2)
    
    >>>[444 333 578 456]
       [578 496]
    
    result_min_1 = np.amin(array_9,axis=1)   #行内的最小值      
    result_min_2 = np.amin(array_9,axis=0)   #列内的最小值
    print(result_min_1)
    print(result_min_2)
    
    >>>[369   0 496 425]
       [333   0]
    
    result_mean_1 = np.mean(array_9,axis=1)  #行平均值  一个人四级六级平均成绩
    result_mean_2 = np.mean(array_9,axis=0)  #列平均值  四个人四级、六级分别平均成绩
    print(result_mean_1)
    print(result_mean_2)
    
    >>>[406.5 166.5 537.  440.5]
       [452.75 322.5 ]
    
    result_std_1 = np.std(array_9,axis=1)    #std方差
    result_std_2 = np.std(array_9,axis=0)
    print(result_std_1)
    print(result_std_2)
    
    >>>[ 37.5 166.5  41.   15.5]
       [ 86.76800966 191.55743264]
    

    数组运算:

    print("origin array:" ,array_9)
    array_9[:,0] = array_9[:,0]+5      #将所有人第一列四级的成绩加五分
    print("after the chage:",array_9)
    
    print("origin array:" ,array_9)
    array_9[:,1] = array_9[:,1]*0.5      #将所有人第二列六级级的成绩减半
    print("after the chage:",array_9)
    
    >>>
    origin array:    [[444 369]
                      [333   0]
                      [578 496]
                      [456 425]]
    after the chage: [[449 369]
                      [338   0]
                      [583 496]
                      [461 425]]
    origin array:    [[449 369]
                      [338   0]
                      [583 496]
                      [461 425]]
    after the chage: [[449 184]
                      [338   0]
                      [583 248]
                      [461 212]]
    

    矩阵运算:

    np.dot()
    规则:(M行, N列) * (N行, Z列) = (M行, Z列)

    q = np.array([[0.4], [0.6]])    #array_9四行两列 * q 二行一列 = 四行一列
    result = np.dot(array_9, q)
    print(result)
    
    >>>[[399. ]
        [133.2]
        [528.8]
        [437.4]]
    

    矩阵合并:

    qaaq = [425,425]
    array_10 = np.array(qaaq)
    print(array_10)
    array_11 = np.vstack((array_9,array_10))  #vstack 垂直拼接  hstack水平拼接
    print(array_11)
    
    >>>[[444 369]
        [333   0]
        [578 496]
        [456 425]
        [425 425]]
    

    相关文章

      网友评论

      本文标题:数据科学三基友之Numpy

      本文链接:https://www.haomeiwen.com/subject/grbvxqtx.html