• numpy模块


    numpy

    • 多维数组(列表)的运算
    # 约定俗成定义为np
    import numpy as np
    

    array

    • 数据类型,有点像列表

    一维数组

    • 只有一行
    • 相当于数学中的线
    lis = [1, 2, 3]
    print(np.array(lis))
    
    [1 2 3]
    

    二维数组(用的最多)

    • 有行有列
    • 相当于数学中的面,其中有多条线,也就是装了多个一维数组
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr)
    
    [[1 2 3]
     [4 5 6]]
    

    np.array和list的区别

    1. np.array是多维的,list是一维的
    2. numpy的操作更加全面

    获取多维数组的属性

    arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    
    print(arr.dtype)      # 查看元素的数据类型
    print(arr.size)       # 数组元素的个数
    print(arr.ndim)      # 数组的维度
    
    print(arr.shape)        # 把行和列返回在一个元祖中
    print(arr.shape[0])     # 行
    print(arr.shape[1])     # 列
    
    int32
    8
    2
    
    (2, 4)
    2
    4
    

    多维数组的索引与切片

    • 中括号加索引,行和列用逗号分开
    print(arr)
    print('-' * 10)
    print(arr[1, 2])     # 第二行第三列
    print(arr[0, [0, 1, 2, 3]])    # 第一行所有的值
    print(arr[0, :])    # 第一行所有的值切片
    print(arr[:, 0])    # 第一列所有的值切片
    print(arr[:, :])    # 整个多维数组切片
    
    [[1 2 3 4]
     [5 6 7 8]]
    ----------
    7
    [1 2 3 4]
    [1 2 3 4]
    [1 5]
    [[1 2 3 4]
     [5 6 7 8]]
    
    花式索引
    arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    #### 获取 5,7,9,10
    arr[ [4, 6, 8, 9] ]  ### 列表嵌套列表, 内层列表的值对应的是需求的值的索引值
    
    ([5, 7, 9, 10])
    

    高级功能

    • 加入判断,筛选功能
    # 筛选出值大于50的数
    arr = np.array([[12, 123, 20], [145, 56, 24], [51, 1, 2]])
    print(arr)
    print('-' * 20)
    print(arr > 50)	# 布尔型索引
    print('-' * 20)
    print(arr[arr > 50])
    print('-' * 20) 
    
    [[ 12 123  20]
     [145  56  24]
     [ 51   1   2]]
    --------------------
    [[False  True False]
     [ True  True False]
     [ True False False]]
    --------------------
    [123 145  56  51]
    --------------------
    

    多维数组的元素替换

    arr = np.array([[12, 123, 20], [145, 56, 24], [51, 1, 2]])
    print(arr)
    print('-' * 20)
    arr[1, 2] = 20    # 第二行的第三个元素改为20
    print(arr)
    print('-' * 20)
    arr[1, :] = 20    # 第一行所有元素改为0
    print(arr)
    print('-' * 20)
    arr[arr > 50] = 40  # 大于50的全变为40
    print(arr)
    print('-' * 20)
    
    [[ 12 123  20]
     [145  56  24]
     [ 51   1   2]]
    --------------------
    [[ 12 123  20]
     [145  56  20]
     [ 51   1   2]]
    --------------------
    [[ 12 123  20]
     [ 20  20  20]
     [ 51   1   2]]
    --------------------
    [[12 40 20]
     [20 20 20]
     [40  1  2]]
    --------------------
    

    多维数组的合并

    arr1 = np.array([[1, 2, 3], [4, 5, 6]])
    arr2 = np.array([[7, 8, 9], [10, 11, 12]])
    
    • vstack和hstack只能放一个参数,这个参数必须是容器
    # vstack和hstack
    print(np.vstack((arr1, arr2)))  # v:vertical 垂直
    print('-' * 20)
    print(np.hstack([arr1, arr2]))  # h:horizon 水平
    print('-' * 20)
    
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    --------------------
    [[ 1  2  3  7  8  9]
     [ 4  5  6 10 11 12]]
    --------------------
    
    • 在numpy中,为了统一做处理,只要有axis参数的,axis=0就是列,axis=1就是行
    # concatenate
    print(np.concatenate((arr1, arr2)))   # 默认是垂直
    print('-' * 20)
    print(np.concatenate((arr1, arr2), axis=0))  # 0是列
    print('-' * 20)
    print(np.concatenate((arr1, arr2), axis=1))  # 1是行
    print('-' * 20)
    
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    --------------------
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    --------------------
    [[ 1  2  3  7  8  9]
     [ 4  5  6 10 11 12]]
    --------------------
    

    通过函数方法创建多维数组

    创建一维数组

    • arange
    print(np.arange(10))
    print(np.arange(1, 10, 2))
    
    [0 1 2 3 4 5 6 7 8 9]
    [1 3 5 7 9]
    
    • linspace
    # 创建一个从2到5,一共有五个值的一位数组,不包括5
    # num表示有多少个值,默认是50,endpoint表示是否包括最大值,默认是True
    np.linspace(2,5, num=5, endpoint=False)
    
    array([2. , 2.6, 3.2, 3.8, 4.4])
    

    创建多维数组

    • zeros
    # zeros全是0
    print(np.zeros((3, 4)))    
    print('-' * 20)
    print(np.zeros((2, 4, 3)))     # 3控制一维,(3,4)控制二维,(3,4,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. 0. 0.]
      [0. 0. 0.]
      [0. 0. 0.]
      [0. 0. 0.]]]
    
    • ones
    # ones全是1
    print(np.ones((3, 4)))
    
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
    
    • eye
    print(np.eye(5))
    
    [[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.]]
    
    • empty
    np.empty((2,3), dtype=int)  ### 随机生成指定维度的随机数
    
    ([[856,   0, 856],
     [  0,   1,   0]])
    
    • reshape
    arr = np.arange(10)
    arr.reshape(2,5)  #### 一维数组转换成二维数组
    
    ([[0, 1, 2, 3, 4],
     [5, 6, 7, 8, 9]])
    

    矩阵的向量运算

    +	两个矩阵对应元素相加
    -	两个矩阵对应元素相减
    *	两个矩阵对应元素相乘
    /	两个矩阵对应元素相除,如果都是整数则取商
    %	两个矩阵对应元素相除后取余数
    **n	单个矩阵每个元素都取n次方,如**2:每个元素都取平方
    
    # 元素对应相加,可以加一维,但是不要这么做
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])
    arr2 = np.array([[7, 8, 9], [10, 11, 12]])
    print(arr1+arr2)
    
    #...其余方法都大同小异
    
    [[ 8 10 12]
     [14 16 18]]
    

    通用函数

    np.abs([-1,-2,34,5])  ### 求一个绝对值
    np.fabs([-2.3,-3.4, 5.6])  #### 求浮点数的绝对值
    np.sqrt(4)   #### 求一个数的平方根
    print('----------')
    np.square([5,3,4,6])  #### 求平方
    np.exp(2)  ### e^2  e的取值是 2.7181
    np.log(10)  # 以e为底
    
    array([ 1,  2, 34,  5])
    array([2.3, 3.4, 5.6])
    2.0
    ----------
    array([25,  9, 16, 36], dtype=int32)
    7.38905609893065
    2.302585092994046
    
    • 数字相关
    a = a = np.array([1,2,3,4])
    np.sum(a)  ### 求和
    np.mean(a)	### 求平均值
    np.max(a)	### 最大值
    np.argmax(a)  ### 最大值的索引
    print('----------')
    np.var(a)	### 求方差
    np.std(a)	### 求标准差
    print('----------')
    np.ceil(10.4) ### ceil:天花板  向上取整
    np.floor(10.6) ### floor:地板 向下取整
    np.rint(10.8)  #### 四舍五入
    np.modf(10.7) ### 把整数和小数分开
    
    10
    2.75
    4
    3
    ----------
    1.25
    1.118033988749895
    ----------
    11.0
    10.0
    11.0
    (0.6999999999999993, 10.0)
    
    • isnan
    np.isnan(45)	#### 用来判断是否是一个数,nan : not a number,所以为False代表是一个数字
    np.nan
    np.isnan(np.nan)
    np.isnan([1,2,3,np.nan,23])
    np.nan == np.nan
    
    False
    nan
    True
    array([False, False, False,  True, False])
    False
    
    • isinf
    np.inf	# 无穷大
    
    inf
    

    点乘,转置,求逆(了解,数学知识)

    # 点乘
    # 需要一个(m,n)的数组和一个(n,m)的数组
    # T可以把数组转置
    np.dot(arr1, arr2.T)
    
    array([[ 50,  68],
           [122, 167]])
    
    # 求逆
    np.linalg.inv(np.dot(arr1, arr2.T))
    
    array([[ 3.09259259, -1.25925926],
           [-2.25925926,  0.92592593]])
    

    极值

    print(arr1)
    print(arr1.max())
    print(arr1.min())
    
    [[1 2 3]
     [4 5 6]]
    6
    1
    

    numpy生成随机数

    np.random.rand(3, 4)
    
    array([[0.95163457, 0.8643344 , 0.86843741, 0.45000529],
           [0.01025429, 0.25391508, 0.28262799, 0.88679772],
           [0.43937459, 0.13525713, 0.13961072, 0.61232842]])
    

    固定随机数,让它不随机

    rs = np.random.RandomState(1)
    print(rs.rand(3, 4))
    
    # 和上面作用相同
    # np.random.seed(1)
    # print(np.random.rand(3, 4))
    
    [[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
     [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
     [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
    

    三维数组(了解)

    • 多个面(二维数组)
  • 相关阅读:
    Postman使用
    Java-性能调优-理解GC日志
    Java-性能调优实战(jps、jstack)
    Java-性能调优工具-jstat
    Java-内存模型
    生产者消费者JAVA实现
    Java-GC垃圾收集器
    JAVA-JVM垃圾回收算法
    Java线程状态流转---线程
    【洛谷5072】[Ynoi2015] 盼君勿忘(莫队)
  • 原文地址:https://www.cnblogs.com/lucky75/p/11011604.html
Copyright © 2020-2023  润新知