python数据分析包02|NumPy-02

作者: pythonic生物人 | 来源:发表于2020-07-31 19:28 被阅读0次

    本文图解numpy基础使用方法。
    首发于本人公众号:pythonic生物人

    更好的阅读体验请戳:

    python数据分析包|NumPy-02

    1、一维数组

    创建数组

    In [77]: import numpy as np
    In [78]: np.array([1,2,3])
    Out[78]: array([1, 2, 3])
    
    image

    numpy创建元素全为1、为0及随机数数组

    In [79]: np.ones(3)
    Out[79]: array([1., 1., 1.])
    
    In [80]: np.zeros(3)
    Out[80]: array([0., 0., 0.])
    
    In [81]: np.random.random(3)
    Out[81]: array([0.95802737, 0.47883203, 0.12742189])
    
    image

    数组相加

    In [83]: data = np.array([1,2])
    In [84]: ones = np.ones(2)
    
    In [85]: data
    Out[85]: array([1, 2])
    
    In [86]: ones
    Out[86]: array([1., 1.])
    In [87]: data + ones
    Out[87]: array([2., 3.])
    
    image

    数组相减、乘、除

    In [88]: data - ones
    Out[88]: array([0., 1.])
    
    In [89]: data * ones
    Out[89]: array([1., 2.])
    
    In [90]: data / ones
    Out[90]: array([1., 2.])
    
    image

    数组与常数的运算,即广播(broadcasting)

    In [91]: data * 1.6#这种计算逻辑被称为广播(broadcasting)
    Out[91]: array([1.6, 3.2])
    
    image

    数组索引

    In [99]: data = np.array([1,2,3])
    In [100]: data
    Out[100]: array([1, 2, 3])
    
    In [101]: data[0]
    Out[101]: 1
    
    In [102]: data[1]
    Out[102]: 2
    
    
    In [104]: data[0:2]
    Out[104]: array([1, 2])
    
    In [105]: data[1:]
    Out[105]: array([2, 3])
    
    image

    数组简单统计计算(aggregation)

    一些统计计算的函数 :

    函数名称    描述
    np.sum  计算元素的和
    np.prod 计算元素的积
    np.mean 计算元素的平均值
    np.std  计算元素的标准差
    np.var  计算元素的方差
    np.min  找出最小值
    np.max  找出最大值
    np.argmin   找出最小值的索引
    np.argmax   找出最大值的索引
    np.median   计算元素的中位数
    np.percentile np.nanpercentile 计算基于元素排序的统计值
    np.any  验证任何一个元素是否为真
    np.all  验证所有元素是否为真
    
    In [106]: data.max()
    Out[106]: 3
    
    In [107]: data.min()
    Out[107]: 1
    
    In [108]: data.sum()
    Out[108]: 6
    
    image

    2、二维数组

    • 数组构建

    In [2]: import numpy as np
    In [3]: np.array([[1,2],[3,4]])
    Out[3]:
    array([[1, 2],
           [3, 4]])
    
    image

    ones、zeros、random创建数组

    In [4]: np.ones((3,2))#元素全为1的数组
    Out[4]:
    array([[1., 1.],
           [1., 1.],
           [1., 1.]])
    
    In [5]: np.zeros((3,2))#元素全为0的数组
    Out[5]:
    array([[0., 0.],
           [0., 0.],
           [0., 0.]])
    
    In [6]: np.random.random((3,2))#随机数数组
    Out[6]:
    array([[0.99160431, 0.94423442],
           [0.77457438, 0.442339  ],
           [0.18536075, 0.44602502]])
    
    image

    简单数组运算(+)

    In [7]: data =  np.array([[1,2],[3,4]])
    In [8]: ones = np.ones((2,2))
    In [9]: data
    Out[9]:
    array([[1, 2],
           [3, 4]])
    
    In [10]: ones
    Out[10]:
    array([[1., 1.],
           [1., 1.]])
    
    In [11]: data + ones
    Out[11]:
    array([[2., 3.],
           [4., 5.]])
    
    image

    简单数组运算(广播(broadcast)的算法)

    In [12]: ones_row = np.ones(2)
    In [13]: data + ones_row#此处又使用到广播(broadcast)的算法
    Out[13]:
    array([[2., 3.],
           [4., 5.]])
    
    image

    矩阵运算(dot)

    和线性代数里面一样,一个shape为(x,n)的数组与一个shape为(n,y)的数组相乘得一个shape为(x,y)的数组,此处可直观理解为第一个的数组的列数等于第二个的行数。

    In [20]: data = np.array([1,2,3])
    In [21]: power_of_ten = np.array([1,10,100,1000,10000,100000]).reshape(3,2)
    
    In [22]: data
    Out[22]: array([1, 2, 3])
    
    In [23]: power_of_ten
    Out[23]:
    array([[     1,     10],
           [   100,   1000],
           [ 10000, 100000]])
    
    In [24]: data.dot(power_of_ten)
    Out[24]: array([ 30201, 302010])
    
    In [25]: data.shape
    Out[25]: (3,)#1行3列的数组
    
    In [26]: power_of_ten.shape
    Out[26]: (3, 2)#3行两列的数组
    
    In [27]: data.dot(power_of_ten).shape
    Out[27]: (2,)#相乘的一个1行2列的数组
    
    image

    二维数组索引

    In [32]: data = np.arange(1,7).reshape((3,2))
    In [33]: data
    Out[33]:
    array([[1, 2],
           [3, 4],
           [5, 6]])
    n [34]: data[0,1]
    Out[34]: 2
    
    In [35]: data[1:3]
    Out[35]:
    array([[3, 4],
           [5, 6]])
    
    In [36]: data[0:2,0]#[0:2,0]可以理解逗号前为行的范围,逗号后为列的范围
    Out[36]: array([1, 3])
    
    image

    二维数组像一维数组一样的统计运算

    In [38]: data.max()
    Out[38]: 6
    
    In [39]: data.min()
    Out[39]: 1
    
    In [40]: data.sum()
    Out[40]: 21
    
    image

    二维数组沿着某个轴统计运算(传入axis参数)

    In [43]: data = np.array([[1,2],[5,3],[4,6]])
    In [44]: data
    Out[44]:
    array([[1, 2],
           [5, 3],
           [4, 6]])
    
    In [46]: data.max()
    Out[46]: 6
    
    In [47]: data.min()
    Out[47]: 1
    
    In [48]: data.sum()
    Out[48]: 21
    
    In [49]: data.max(axis=0)#求每一列(0轴)的最大值
    Out[49]: array([5, 6])
    
    In [50]: data.max(axis=1)#求每一行(1轴)的最大值
    Out[50]: array([2, 5, 6])
    
    image
    • 二维数组转秩(行变列或者1轴转0轴)

    In [51]: data = np.arange(1,7).reshape(3,2)
    In [52]: data
    Out[52]:
    array([[1, 2],
           [3, 4],
           [5, 6]])
    
    In [53]: data.T
    Out[53]:
    array([[1, 3, 5],
           [2, 4, 6]])
    
    image

    二维数组变形(reshape)

    In [54]: data = np.arange(1,7)
    In [55]: data
    Out[55]: array([1, 2, 3, 4, 5, 6])
    In [56]: data.reshape(2,3)
    Out[56]:
    array([[1, 2, 3],
           [4, 5, 6]])
    
    In [57]: data.reshape(3,2)
    Out[57]:
    array([[1, 2],
           [3, 4],
           [5, 6]])
    
    image

    3、三维数组

    创建三维数组

    In [65]: np.ones((4,3,2))#下图能形象的显示意义
    Out[65]:
    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.]]])
    
    image
    In [66]: np.arange(1,9).reshape(2,2,2)#下图更形象
    Out[66]:
    array([[[1, 2],
            [3, 4]],
    
           [[5, 6],
            [7, 8]]])
    
    image

    参考资料

    https://jalammar.github.io/visual-numpy/
    Python数据科学手册
    B站up: https://www.bilibili.com/video/BV134411p7gU


    更好的阅读体验请戳:

    python数据分析包|NumPy-02


    欢迎关注公众号:pythonic生物人

    干货,真香

    相关文章

      网友评论

        本文标题:python数据分析包02|NumPy-02

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