• NumPy库的基本使用


    一、介绍

      ——NumPy库是高性能科学计算和数据分析的基础包,它是Pandas及其它各种工具的基础

      ——NumPy里的ndarry多维数组对象,与列表的区别是:

        - 数组对象内的元素类型必须一样

        - 数组大小不可修改

      ——数组对象的常用属性:

        - T    数组的转置(在多维数组里,将列转成行,行转成列的操作)

        - dtype   数据元素的数据类型

        - size     数组元素的个数

        - ndim    数组的维数

        - shape  数组的维度大小

    二、创建ndarray对象

      1、基本创建数组的方法:

    import numpy as np #首先需要导入numpy库
    
    #创建一维的narray对象
    a1 = np.array([1,2,3,4,5])    #一个列表
    
    #创建二维的narray对象
    a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])    # 一个列表里套两个列表
    
    #创建多维对象以次类推

        指定数据类型:dtype

    a = np.array([2,23,4],dtype=np.int)
    print(a.dtype)
    # int 64
    a = np.array([2,23,4],dtype=np.int32)
    print(a.dtype)
    # int32
    a = np.array([2,23,4],dtype=np.float)
    print(a.dtype)
    # float64
    a = np.array([2,23,4],dtype=np.float32)
    print(a.dtype)
    # float32

      自带的几种数组创建方法:

      1、zeros:创建全零数组

        a = np.zeros((3,4)) # 数据全为0,3行4列

      2、ones:创建全一数组, 同时也能指定这些特定数据的 dtype:

        a = np.ones((5,3),dtype = np.int) # 数据为1,5行3列

      3、empty:创建全空数组, 其实每个值都是接近于零的数:

        a = np.empty((2,2)) # 数据为empty,2行2列

      4、arange:传值创建连续数组:

    a = np.arange(10) # 默认从0开始到10(不包括10),步长为1
    print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]
    
    a = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2
    print(a) # 返回 [ 5  7  9 11 13 15 17 19]

       5、reshape()函数通常结合arange()函数使用,改变数组的维度

    # 将一维数组a变为3*4的数组
    a=np.arange(12).reshape((3,4))
    
    # 将a变回为一维数组
    a.reshape((12,))

      6、linspace()函数跟arange()函数相似,前两个参数指定序列的开头和结尾,第三个参数指定将数组拆分成几个

    np.linspace(0,10,5)
    # array([  0. ,   2.5,   5. ,   7.5,  10. ])

      7、random()函数使用随机数填充数组

    # 生成一维数组
    a = np.random.random(3) 
    print(a)
    # array([ 0.0092522 ,  0.44961339,  0.85684498])
    
    # 生成多维数组
    a = np.random.random((3,3))
    print(a)
    # array([[ 0.50311642,  0.25961784,  0.30587642],
           [ 0.55388356,  0.92739877,  0.26140058],
           [ 0.63482092,  0.45938232,  0.84053653]])
    # 生成的都是0~1范围的小数

    三、数组基本操作

      1、算术运算符

        算术运算符可以用于数组和标量之间

    >>> a=np.arange(4)
    >>> a
    array([0, 1, 2, 3])
    
    >>> a+4
    array([4, 5, 6, 7])
    
    >>> a-4
    array([-4, -3, -2, -1])
    
    >>> a*4
    array([ 0,  4,  8, 12])
    
    >>> a/2
    array([0, 0, 1, 1])

        还可以用于两个数组之间,这两个数组的元素位置必须相同,也就是具有相同的型

    >>> a=np.arange(4)
    >>> a
    array([0, 1, 2, 3])
    
    >>> b=np.arange(4,8)
    >>> b
    array([4, 5, 6, 7])
    
    >>> a+b
    array([ 4,  6,  8, 10])
    
    >>> a-b
    array([-4, -4, -4, -4])
    
    >>> a*b
    array([ 0,  5, 12, 21])
    
    >>> a/b
    array([0, 0, 0, 0]) #整数相除只取商
    >>> a**2
    array([ 0, 1, 4, 9])
    >>> a%b    # 相除后取余数
    array([ 0,  5, 12, 21]) 

      对于多维数组是一样适用的,

    >>> A=np.arange(9).reshape((3,3))
    >>> A
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    
    >>> B=np.ones((3,3))
    >>> B
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])
    
    >>> A*B
    array([[ 0.,  1.,  2.],
           [ 3.,  4.,  5.],
           [ 6.,  7.,  8.]])
    

      2、数组的索引与切片

    A = np.arange(3,15).reshape((3,4))
    """
    array([[ 3,  4,  5,  6]
           [ 7,  8,  9, 10]
           [11, 12, 13, 14]])
    在这样的二维数组中,每一行有从0开始的索引,每一行里的元素也有自己的索引,所以:
    """
    print(A[2])         
    # [11 12 13 14]
    
    print(A[2,2])
    # 13
    

        切片

    # 数组也有类似列表的切片操作
    A = np.arange(3,15).reshape((3,4))
    """
    array([[ 3,  4,  5,  6]
           [ 7,  8,  9, 10]
           [11, 12, 13, 14]])
    """

    print(A[1,0:2])
    # [7,8]

    print(A[0:2,1:3])
    """
    array([[4,  5]
           [8,  9]
           [12, 13]])
    """
    
    

      Numpy 的 copy & deepcopy:

        = 的赋值方式会带有关联性:

    import numpy as np
    
    a = np.arange(4)
    # array([0, 1, 2, 3])
    
    b = a
    c = a
    d = b

        改变a的第一个值,bcd的第一个值也会同时改变。

    a[0] = 11
    print(a)
    # array([11,  1,  2,  3])

        确认bcd是否与a相同。

    print(b is a)  # True
    print(c is a)  # True
    print(d is a)  # True

        同样的,更改d的值,abc也会改变。

    d[1:3] = [22, 33]   # array([11, 22, 33,  3])
    print(a)            # array([11, 22, 33,  3])
    print(b)            # array([11, 22, 33,  3])
    print(c)            # array([11, 22, 33,  3])

        copy()的赋值方式没有关联性

    b = a.copy()    # deep copy
    print(b)        # array([11, 22, 33,  3])
    a[3] = 44
    print(a)        # array([11, 22, 33, 44])
    print(b)        # array([11, 22, 33,  3])

      3、矩阵常用函数    

        1)最大值最小值

    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    print(a.max()) #获取整个矩阵的最大值 结果: 6
    print(a.min()) #最小值,结果:1
    
    # 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
    # axis=0 行方向最大(小)值,即获得每列的最大(小)值
    # axis=1 列方向最大(小)值,即获得每行的最大(小)值
    # 例如
    
    print(a.max(axis=0))
    # 结果为 [4 5 6]
    
    print(a.max(axis=1))
    # 结果为 [3 6]
    
    # 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
    print(a.argmax(axis=1))
    # 结果为 [2 2]

        2)平均值

    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    print(a.mean()) #结果为: 3.5
    
    # 同样地,可以通过关键字axis参数指定沿哪个方向获取平均值
    print(a.mean(axis=0)) # 结果 [ 2.5  3.5  4.5]
    print(a.mean(axis=1)) # 结果 [ 2.  5.]

        3)方差:方差的函数为var(),方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。

    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    print(a.var()) # 结果 2.91666666667
    
    print(a.var(axis=0)) # 结果 [ 2.25  2.25  2.25]
    print(a.var(axis=1)) # 结果 [ 0.66666667  0.66666667]

        4)标准差:标准差的函数为std(),std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())

    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    print(a.std()) # 结果 1.70782512766
    
    print(a.std(axis=0)) # 结果 [ 1.5  1.5  1.5]
    print(a.std(axis=1)) # 结果 [ 0.81649658  0.81649658]

        5)中值:中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。

    import numpy as np
    x = np.array([[1,2,3],[4,5,6]])
    
    print(np.median(x))  # 对所有数取中值
    # 结果 3.5
    
    print(np.median(x,axis=0))  # 沿第一维方向取中值
    # 结果 [ 2.5  3.5  4.5]
    
    print(np.median(x,axis=1))  # 沿第二维方向取中值
    # 结果 [ 2.  5.]

        6)求和:矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和

    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    
    print(a.sum())           # 对整个矩阵求和
    # 结果 21
    
    print(a.sum(axis=0)) # 对行方向求和
    # 结果 [5 7 9]
    
    print(a.sum(axis=1)) # 对列方向求和
    # 结果 [ 6 15]

        7)累积和:

    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    
    print(a.cumsum())            # 对整个矩阵求累积和
    # 结果 [ 1  3  6 10 15 21]
    
    print(a.cumsum(axis=0))  # 对行方向求累积和
    """
    结果[[1 2 4]
     [5 7 9]]
    """
    
    print(a.cumsum(axis=1))  # 对列方向求累积和
    """
    结果
    [[ 1  3  6]
     [ 4  9 15]]
    """

     

  • 相关阅读:
    [BZOJ2729]排队
    [BZOJ2839]集合计数
    [BZOJ2111] Perm 排列计数
    Unet 项目部分代码学习
    数据增强代码
    论文阅读笔记五:U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015)
    CTPN项目部分代码学习
    论文阅读笔记四:CTPN: Detecting Text in Natural Image with Connectionist Text Proposal Network(ECCV2016)
    R2CNN项目部分代码学习
    VOC数据集生成代码使用说明
  • 原文地址:https://www.cnblogs.com/value-code/p/8377585.html
Copyright © 2020-2023  润新知