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

博客主要介绍Python中numpy的相关操作,包括使用numpy创建普通和特殊矩阵,进行矩阵转换(如形状改变、转置、堆叠),计算矩阵的最大值、最小值和平均值,执行矩阵的数学运算,获取矩阵元素等,还提及了使用numpy进行简单绘图,如散点图和直方图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中的jupyter的基本操作

esc  //进行命令模式
按b  //向下增加一行
按a  //向上增加一行
连续按两次d  //删除一行


//编辑模式
shift + enter  //运行命令

//运行的变量是根据运行的顺序决定的

//想要隐藏输出结果,点击jupyter对应代码块左边栏即可

//shift + tab   //可以查看函数介绍

按tab自动补全函数!!

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
  • 使用numpy进行特殊矩阵创建
np.zeros((2,4), dtype = np.int32)    //创建全0矩阵
np.ones((2,4), dtype = np.float32)   //创建全1矩阵
np.eye(3)    //创建3x3的单位矩阵,默认为float64类型
  • 使用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矩阵

numpy中矩阵转换

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

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

      a = np.zeros((3,4))
      b = a.reshape(1,12)
      print(a)  //(3,4)
      print(b)  //(1,12)
      
    • 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]  //也代表两个矩阵的数学相乘
      
  • 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]]
    

简单绘图

  • 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()
    

在这里插入图片描述

  • 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()

在这里插入图片描述

  • 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()
    

在这里插入图片描述

  • 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()
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值