• 数字图像处理(一):numpy的基本操作和简单绘图


    python中的jupyter的基本操作

    esc  //进行命令模式
    按b  //向下增加一行
    按a  //向上增加一行
    连续按两次d  //删除一行
    
    
    //编辑模式
    shift + enter  //运行命令
    
    //运行的变量是根据运行的顺序决定的
    
    //想要隐藏输出结果,点击jupyter对应代码块左边栏即可
    
    //shift + tab   //可以查看函数介绍
    
    按tab自动补全函数!!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    numpy创建矩阵

    • 使用numpy进行普通矩阵创建
    import numpy as np
    x = np.array([1,2,3])  //创建矩阵中每个元素的类型为int32
    y = np.uint8([1,2,3])  //创建矩阵中每个元素的类型为uint8
    
    x = np.float32(x)   //此时将x中的元素类型转换为float32
    
    #使用arange函数创建矩阵,到不了最后一位
    z = np.arange(10)   //生成([0,1,2,3,4,5,6,7,8,9]),默认从0开始,步长为1
    z = np.array(2, 10 ,2)  //生成([2,4,6,8]),2开始,步长为2
    
    #使用linespace函数创建矩阵,可以到最后一位
    u = np.linespace(0, 10, 11)  //010分成11份,每份长度为1,生成([0,1,2,3,4,5,6,7,8,9,10])
    
    np.pi = 3.14   //也就是pi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 使用numpy进行特殊矩阵创建
    np.zeros((2,4), dtype = np.int32)    //创建全0矩阵
    np.ones((2,4), dtype = np.float32)   //创建全1矩阵
    np.eye(3)    //创建3x3的单位矩阵,默认为float64类型
    
    • 1
    • 2
    • 3
    • 使用np.random.randint()创建矩阵
    np.random.randint(0, 10, 5, np.int32)  //[0,10)范围内随机生成1x5矩阵。其中,它的子元素类型为int32
    np.random.randint(0, 10, (3,4), np.int32) //[0,10)范围内随机生成3x4矩阵
    
    • 1
    • 2

    numpy中矩阵转换

    • 形状改变:reshapeA.reshape((1,9))

      • 将原矩阵转换为1x9,但是并不改变本身矩阵,可以等于某个矩阵获得改变后的结果

        a = np.zeros((3,4))
        b = a.reshape(1,12)
        print(a)  //(3,4)
        print(b)  //(1,12)
        
        • 1
        • 2
        • 3
        • 4
      • A.reshape(-1, 9) 让电脑自动计算是 多少行9列

    • 将矩阵展开为一维 A.flatten()A.ravel()

      • A.flatten()生成的形式为(9,),而不是(1,9)
      • A.ravel()效果一样
    • 矩阵转置A.TA.transpose(),均可实现矩阵转置

    • 矩阵堆叠,可以多个矩阵进行堆叠

      • np.hstack(([], [])) 矩阵的水平堆叠,要求行数相同
      • np.vstack(([], [])) 矩阵的垂直堆叠,要求列数相同

    numpy中的最大值最小值平均值

    • 最大值、最小值平均值A.max(),A.min()A.mean()
      • 整个矩阵进行处理
    • 对某一行/列进行处理,三种运算均相同
      • A.max(axis=0) 计算每列的最大值 = np.max(A, axis=0)
      • A.max(axis=1) 计算每行的最大值

    numpy中的数学运算

    • 矩阵相加:A+B 两个矩阵对应元素相加

    • 四种基础运算均可直接写出,均是对应元素运算

      • 当形状不相同时,先广播再乘,这时均是对应相乘

        a = [[1,1,1],
             [1,1,1],
             [1,1,1]]
        b = [1,2,3]
        a * b = [[1,2,3],
                 [1,2,3],
                 [1,2,3]]
        a @ b = [6,6,6]    @代表两个矩阵数学相乘
        a.dot(b) = [6,6,6]  //也代表两个矩阵的数学相乘
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
    • np.pow(A, 2) 每个元素平方

    • np.sqrt(A) 每个元素开平方

    • np.log(A) 每个元素取对数,默认底数为2

    numpy中元素获取

    • 取第0行A[0, :]

    • 取第0列A[:, 0]

    • 取第2-最后行,第2-最后列A[1:,1:]

      b = [[1,2,3],
           [1,2,3],
           [1,2,3]]
      b[1:, 1:] = [[2,3],
                   [2,3]]
      
      • 1
      • 2
      • 3
      • 4
      • 5

    简单绘图

    • plt.plot(x,y) 散点图

      • plt.plot(x,y,"*") 线段的样式调整为*号
      • plt.plot(x,y,"*",color='r') 将线段的颜色调整为红色,“*”
      import numpy as np
      import matplotlib.pyplot as plt
      
      x = np.arange(2, 20)
      y = 2 * x + np.random.randint(5, 20, 18)
      plt.plot(x,y)
      plt.show()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    在这里插入图片描述

    • plt.plot(x,y) 更高级的写法
    x = np.linspace(0, 1, 100)
    y1 = np.power(x, 0.5)
    y2 = x
    y3 = np.power(x, 1.5)
    
    //将每条线上定义一个label
    plt.plot(x, y1, label=0.5)  
    plt.plot(x, y2, label=1)
    plt.plot(x, y3, label=1.5)
    
    //显示每条线上的label,如果不添加,不显示label
    plt.legend()  
    
    plt.xlabel("r")     //x轴添加标签
    plt.ylabel("s")     //y轴添加标签
    plt.grid()          //显示网格
    plt.xlim([0, 1])    //限定x轴的取值范围
    plt.ylim([0, 1])    //限定y轴的取值范围
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    • plt.hist 直方图

      • 统计元素出现的个数
      x = np.random.randint(0, 101, 1000)
      plt.hist(x, rwidth=0.9)  //将柱状图的柱子分开,只显示90%
      plt.hist(x, rwidth=0.9, color='g')  //将柱子的颜色变为绿色
      plt.show()
      
      • 1
      • 2
      • 3
      • 4

    在这里插入图片描述

    • bins的参数设置

      • 如果不设置,默认直方图中有10个柱子
      • 如果bins为数字n,则代表设置直方图有n个柱子
      • 如果bins为数组,则生成的柱状以前后两个元素的中间值为中心生成柱子,统计范围为数组的范围
        • 如bins = (0.5,1.5,2.5),则生成的柱子以1和2为中心,统计范围是[0.5,2.5)
      bins = np.arange(-0.5, 101, 1)   //以整数0,1,2,3,..,100为中心生成柱子,统计范围为(-0.5, 100)
      plt.plot(x, bins)
      plt.show()
      
      • 1
      • 2
      • 3

    在这里插入图片描述

  • 相关阅读:
    antd table表格支持多选框选择当前列,进行格式设置等
    Java以form-data(表单)的形式调用第三方接口
    AI改写-AI改写可以迅速生成新的文章有什么弊端吗?
    Pycharm的python Interpreter打不开
    windows查看硬盘序列号
    自定义Webpack配置
    我做的百度飞桨PaddleOCR .NET调用库
    获取唯一的短邀请码
    图像识别技术在农业领域的应用与挑战
    Java Object转String方式
  • 原文地址:https://blog.csdn.net/cxkyxx/article/details/127598704