zoukankan      html  css  js  c++  java
  • day 18

    01.numpy模块

    https://www.cnblogs.com/nickchen121/p/10807564.html

    1. numpy模块简介

      numpy是python的一种开源数值计算扩展库。这种库可以用来存储和处理大型numpy数组,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)

    2. numpy库的两个作用

      1. 提供了数组间的操作、运算、统计分布和简单的数学模型
      2. 计算速度快,甚至要优于python内置的简单运算,使其成为pandas、sklearn等模块以来的包。高级的框架如TensorFlow、PyTorch等。其数组操作也和numpy非常相似
    3. numpy的用法

      1. 创建numpy数组 # 三维及以上不推荐使用numpy

        numpy数组即numpy的内部定义的ndarray对象,创建numpy数组就是把一个list传入np.array()

        import numpy as np
        arr = np.array([1,2,3]) # 创建一维的ndarray对象
        print(arr,arr.dtype,type(arr)) 
        ar2 = np.array([[1.,2,3],[2,3,4]]) # 创建二维的ndarray对象
        print(ar2,ar2.dtype,type(ar2))
        ar3 = np.array([[[1,2,3]],[[4,5,6]],[[7,8,9]]]) # 创建三维的ndarray对象
        print(ar3,'
        ','维数:',ar3.ndim)
        ar33 = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]])  # 创建三维的ndarray对象
        print(ar33,'
        ','维数:',ar33.ndim)
        
        [1 2 3] int64 <class 'numpy.ndarray'> # 列表内元素全为int时,数组元素的数据类型为int64
        [[1. 2. 3.]
         [2. 3. 4.]] float64 <class 'numpy.ndarray'> # 列表内元素有一个位为flaot时,数组元素的数据类型为flaot64
        [[[1 2 3]]
        
         [[4 5 6]]
        
         [[7 8 9]]] 
         维数: 3
        [[[1 2 3]
          [4 5 6]
          [7 8 9]]
        
         [[1 2 3]
          [4 5 6]
          [7 8 9]]
        
         [[1 2 3]
          [4 5 6]
          [7 8 9]]] 
         维数: 3
        
      2. numpy数组的常用属性

        属性 解释
        T 数组的转置(对高维数组而言)
        dtype 数组元素的数据类型
        size 数组元素的个数
        ndim 数组的维数
        shape 数组的维度大小(以元组形式)
        astype 类型转换

        dtype种类:bool_, int(8,16,32,64), float(16,32,64)

        用法

        # T
        import numpy as np
        ar2 = np.array([[1.,2,3],[2,3,4]])
        print(ar2,'
        ',ar2.T)
        
        [[1. 2. 3.]
         [2. 3. 4.]] 
         [[1. 2.]
         [2. 3.]
         [3. 4.]]
        
        # dtype
        import numpy as np
        ar2 = np.array([[1.,2,3],[2,3,4]])
        print(ar2.dtpye) # flaot64
        
        # size
        import numpy as np
        ar2 = np.array([[1.,2,3],[2,3,4]])
        print(ar2.size)  # 6
        
        # ndim
        import numpy as np
        ar2 = np.array([[1.,2,3],[2,3,4]])
        print(ar2.ndim)  # 2
        
        # shape 获取数组的维度大小,以元组的形式存储 # 可以用来获取数组的行列数
        import numpy as np
        arr = np.array([1.,2.,3.])
        print('arr:',arr.shape)
        ar2 = np.array([[1.,2,3],[2,3,4]])
        print('ar2:',ar2.shape)
        ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
        print('ar3:',ar33.shape)
        
        arr: (3,)
        ar2: (2, 3)
        ar3: (3, 3, 4)
        
        
        # astype # 数组数据类型转换
        # dtype种类:bool_, int(8,16,32,64), float(16,32,64)
        import numpy as np
        arr = np.array([1,2,3])
        arr.astype(np.float32)
        print(arr)  # [1 2 3]
        
        
      3. 切割numpy数组

        # numpy数组的切分与列表的切分方法相同
        import numpy as np
        ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
        print(ar33[:,:1,:1]) # []中有几个参数看numpy数组是几维,然后以 层->行->列 的顺序输入 不填默认所有
        
        
        [[[1]]
        
         [[1]]
        
         [[1]]]
        
        
        # 通过条件筛选数值 or 判断数值
        import numpy as np
        ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
        print(ar33[ar33>2])
        print(ar33>2)
        
        
        [3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 6 7 8 9]
        [[[False False  True False]
          [False  True  True  True]
          [False  True  True  True]]
        
         [[False False False  True]
          [False  True  True  True]
          [False  True  True  True]]
        
         [[False False False  True]
          [False  True  True  True]
          [False  True  True  True]]]
        
        
        
      4. numpy数组的元素替换

        # 相当于列表的索引替换值
        import numpy as np
        ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
        ar33[:,:1,:1]=22
        print(ar33)
        
        
        [[[22  2  3  1]
          [ 1  4  5  6]
          [ 1  7  8  9]]
        
         [[22  1  2  3]
          [ 1  4  5  6]
          [ 1  7  8  9]]
        
         [[22  1  2  3]
          [ 1  4  5  6]
          [ 1  7  8  9]]]
        
        
        
      5. numpy数组的合并

      # hstack()方法 # 使用该方法需要保证合并的两个数组行数相同,其中hstack的h表示horizontal水平的
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      ar3 = np.array([[1.,2],[2,4]])
      print(ar2)
      print(ar3)
      ar23 = np.hstack((ar2,ar3))
      print(ar23)
      
      
      [[1. 2. 3.]
       [2. 3. 4.]]
      [[1. 2.]
       [2. 4.]]
      [[1. 2. 3. 1. 2.]
       [2. 3. 4. 2. 4.]]
      
      
      # concatenate(要合并元组,axis=1) # axis=1表示合并两个数组的行,axis=0表示合并列,默认列
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      ar3 = np.array([[1.,2,3],[2,4,4]])
      print(ar2)
      print(ar3)
      ar23 = np.concatenate((ar2,ar3),axis=1)
      print(ar23)
      
      
      [[1. 2. 3.]
       [2. 3. 4.]]
      [[1. 2. 3.]
       [2. 4. 4.]]
      [[1. 2. 3. 1. 2. 3.]
       [2. 3. 4. 2. 4. 4.]]
      
      
      # vstack()方法,使用该方法数组中要有相同的列,v表示vetical垂直的
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      ar3 = np.array([[1.,2,3],[2,4,4]])
      print(ar2)
      print(ar3)
      ar23 = np.vstark((ar2,ar3))
      print(ar23)
      
      
      [[1. 2. 3.]
       [2. 3. 4.]]
      [[1. 2. 3.]
       [2. 4. 4.]]
      [[1. 2. 3.]
       [2. 3. 4.]
       [1. 2. 3.]
       [2. 4. 4.]]
      
      
      1. 通过函数创建numpy数组

        方法 详解
        array() 将列表转换为数组,可选择显式指定dtype
        arange() range的numpy版,支持浮点数
        linspace() 类似arange(),第三个参数为数组长度
        zeros() 根据指定形状和dtype创建全0数组
        ones() 根据指定形状和dtype创建全1数组
        eye() 创建单位矩阵
        empty() 创建一个元素全随机的数组
        reshape() 重塑形状
        # arange() 
        print(np.arange(10)) # 构造从0到9的一维数组
        print(np.arange(1,6)) # 构造从1到5的一维数组
        print(np.arange(1, 20, 2)) # 构造1-19且步长为2的ndarray数组
        
        
        [0 1 2 3 4 5 6 7 8 9]
        [1 2 3 4 5]
        [ 1  3  5  7  9 11 13 15 17 19]
        
        
        # linspace/logspace # 等差/等比 # 等比默认以10为底数 输出默认float64
        print(np.linspace(0,20,5)) # 构造一个等比数列,从0到20取5个数
        print(np.logspace(0,4,5)) # 构造一个等差数列,从10**0到10**4取5个数
        
        
        [ 0.  5. 10. 15. 20.]
        [   1.   10.  100. 1000.]
        
        
        # 构造3*4的全0numpy数组
        print(np.zeros((3, 4)))
        
        
        [[0. 0. 0. 0.]
         [0. 0. 0. 0.]
         [0. 0. 0. 0.]]
        
        
        # 构造3*4的全1numpy数组
        print(np.ones((3, 4)))
        
        
        [[1. 1. 1. 1.]
         [1. 1. 1. 1.]
         [1. 1. 1. 1.]]
        
        
        # 构造3个主元的单位numpy数组
        print(np.eye(3))
        
        
        [[1. 0. 0.]
         [0. 1. 0.]
         [0. 0. 1.]]
        
        
        # 构造一个4*4的随机numpy数组,里面的元素是随机生成的
        print(np.empty((4, 4)))
        [[ 2.31584178e+077 -1.49457545e-154  3.95252517e-323  0.00000000e+000]
         [ 0.00000000e+000  0.00000000e+000  0.00000000e+000  0.00000000e+000]
         [ 0.00000000e+000  0.00000000e+000  0.00000000e+000  0.00000000e+000]
         [ 0.00000000e+000  0.00000000e+000  1.29074055e-231  1.11687366e-308]]
        
        
        arr = np.ones([2,2],dtype=int)
        print(arr.reshape(4,1)) # reshape 对行列数进行修改
        
        
      2. 数组运算

        运算符 说明
        + 两个numpy数组对应元素相加
        - 两个numpy数组对应元素相减
        * 两个numpy数组对应元素相乘
        / 两个numpy数组对应元素相除,如果都是整数则取商
        % 两个numpy数组对应元素相除后取余数
        **n 单个numpy数组每个元素都取n次方,如**2:每个元素都取平方
        arrarr1 = np.array([[1, 2], [3, 4], [5, 6]])
        print(arr1)
        
        
        [[1 2]
         [3 4]
         [5 6]]
        
        
        arr2 = np.array([[7, 8], [9, 10], [11, 12]])
        print(arr2)
        
        
        [[ 7  8]
         [ 9 10]
         [11 12]]
        
        
        print(arr1 + arr2)
        
        
        [[ 8 10]
         [12 14]
         [16 18]]
        print(arr1**2)
        [[ 1  4]
         [ 9 16]
         [25 36]]
        
        
      3. numpy数组运算函数

        numpy数组函数 详解
        np.sin(arr) 对numpy数组arr中每个元素取正弦,sin(x)sin(x)
        np.cos(arr) 对numpy数组arr中每个元素取余弦,cos(x)cos(x)
        np.tan(arr) 对numpy数组arr中每个元素取正切,tan(x)tan(x)
        np.arcsin(arr) 对numpy数组arr中每个元素取反正弦,arcsin(x)arcsin(x)
        np.arccos(arr) 对numpy数组arr中每个元素取反余弦,arccos(x)arccos(x)
        np.arctan(arr) 对numpy数组arr中每个元素取反正切,arctan(x)arctan(x)
        np.exp(arr) 对numpy数组arr中每个元素取指数函数,exex
        np.sqrt(arr) 对numpy数组arr中每个元素开根号x−−√

        一元函数:abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan

        二元函数:add, substract, multiply, divide, power, mod, maximum, minimum

    4. 使用方法还有很多,现阶段不进行学习

    matplotlib模块:画图

    01条形图

    from matplotlib import pyplot as plt  # 约定俗成
    from matplotlib.font_manager import FontProperties  # 修改字体
    
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    
    plt.style.use('ggplot')  # 设置背景
    
    clas = ['3班', '4班', '5班', '6班']
    students = [50, 55, 45, 60]
    clas_index = range(len(clas))
    
    # [0,1,2,3] [50,55,45,60]
    plt.bar(clas_index,students,color='darkblue')
    
    plt.xlabel('学生',fontproperties=font)
    plt.ylabel('学生人数',fontproperties=font)
    plt.title('班级-学生人数',fontproperties=font,fontsize=20,fontweight=25)
    plt.xticks(clas_index,clas,fontproperties=font)
    
    plt.show()
    

    02.直方图

    import numpy as np
    from matplotlib import pyplot as plt  # 约定俗成
    from matplotlib.font_manager import FontProperties  # 修改字体
    
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    
    plt.style.use('ggplot')
    
    x1 = np.random.randn(10000)
    
    x2 = np.random.randn(10000)
    
    fig = plt.figure()  # 生成一张画布
    ax1 = fig.add_subplot(1, 2, 1)  # 1行2列取第一个
    ax2 = fig.add_subplot(1, 2, 2)
    
    ax1.hist(x1, bins=50,color='darkblue')
    ax2.hist(x2, bins=50,color='y')
    
    fig.suptitle('两个正太分布',fontproperties=font,fontsize=20)
    ax1.set_title('x1的正太分布',fontproperties=font)  # 加子标题
    ax2.set_title('x2的正太分布',fontproperties=font)
    plt.show()
    

    03.折线图

    import numpy as np
    from matplotlib import pyplot as plt  # 约定俗成
    from matplotlib.font_manager import FontProperties  # 修改字体
    
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    
    plt.style.use('ggplot')
    
    np.random.seed(10)
    x1 = np.random.randn(40).cumsum()
    x2 = np.random.randn(40).cumsum()
    x3 = np.random.randn(40).cumsum()
    x4 = np.random.randn(40).cumsum()
    
    plt.plot(x1, c='r', linestyle='-', marker='o', label='红圆线')
    plt.plot(x2, color='y', linestyle='--', marker='*', label='黄虚线')
    plt.plot(x3, color='b', linestyle='-.', marker='s', label='蓝方线')
    plt.plot(x4, color='black', linestyle=':', marker='s', label='黑方线')
    plt.legend(loc='best', prop=font)  # 显示label
    plt.show()
    

    04.散点图+直线图

    import numpy as np
    from matplotlib import pyplot as plt  # 约定俗成
    from matplotlib.font_manager import FontProperties  # 修改字体
    
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    
    plt.style.use('ggplot')
    
    fig = plt.figure()
    ax1 = fig.add_subplot(1, 2, 1)
    ax2 = fig.add_subplot(1, 2, 2)
    
    x = np.arange(20)
    y = x ** 2
    
    x2 = np.arange(20)
    y2 = x2
    
    ax1.scatter(x, y, c='r', label='红')
    ax1.scatter(x2, y2, c='b', label='蓝')
    
    ax2.plot(x, y)
    ax2.plot(x2, y2)
    
    fig.suptitle('两张图', fontproperties=font, fontsize=15)
    ax1.set_title('散点图', fontproperties=font)
    ax2.set_title('折线图', fontproperties=font)
    ax1.legend(prop=font)
    plt.show()
    
    # 以上只是基础中的基础
    
  • 相关阅读:
    ERROR 000732:Output Geodatabase:Dataset Database ConnectionsConnection to localhost.sdeSDE.Dataset does not exist or is not supported
    【转】通过 INotifyPropertyChanged 实现观察者模式
    Fatal NI connect error 6413的解决办法 http://www.itpub.net/thread-107518-1-1.html
    Oracle impdp的ignore及 fromuser / touser 功能
    进度条插件使用demo
    两个div并列居中显示——当display:inline-block;时,两个div无法对齐即一高一矮
    两个div并列居中显示——当display:inline;时,div的宽高不起作用即两个div重叠显示
    轮播插件unslider.min.js使用demo
    WEB网页如何让背景图片跟随可视窗口自适应大小
    火狐浏览器不支持location.reload()(以改变页面大小时重新刷新页面为例)
  • 原文地址:https://www.cnblogs.com/luocongyu/p/11630648.html
Copyright © 2011-2022 走看看