当前位置: 首页 > news >正文

OpenCV基础:获取子矩阵的几种方式

目录

相关阅读

方法一:使用切片操作

方法二:使用高级索引

 方法三:使用条件筛选

 方法四:使用 numpy 的 take 函数


相关阅读

OpenCV基础:矩阵的创建、检索与赋值-CSDN博客

OpenCV基础:图像运算-CSDN博客


以下是使用 numpy 获取子矩阵的几种常见方法:

方法一:使用切片操作

import numpy as np# 创建一个示例矩阵
matrix = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])sub_matrix = matrix[0:2, 0:2]
print(sub_matrix)

 代码解释:

  • matrix[0:2, 0:2] 是切片操作,对于二维数组,第一个 0:2 表示行的范围,从第 0 行开始到第 2 行(不包括第 2 行),第二个 0:2 表示列的范围,从第 0 列开始到第 2 列(不包括第 2 列)。
  • 切片操作的基本语法是 start:stop:step,其中 start 是起始索引,stop 是结束索引(不包括该索引对应的元素),step 是步长(默认为 1)。

运行结果: 

方法二:使用高级索引

import numpy as np# 创建一个示例矩阵
matrix = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])# 使用高级索引获取子矩阵,选取特定的行和列
rows = [0, 2]
cols = [1, 3]
sub_matrix = matrix[np.ix_(rows, cols)]
print(sub_matrix)

代码解释:

  • np.ix_ 是 numpy 中的一个函数,它可以将两个一维整数数组转换为一个用于选择矩阵元素的索引器。
  • np.ix_(rows, cols) 会生成一个索引器,用于选取 rows 中指定的行和 cols 中指定的列所构成的子矩阵。

 运行结果:

 方法三:使用条件筛选

import numpy as np# 创建一个示例矩阵
matrix = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])# 筛选出元素大于 5 的元素所在的行和列形成的子矩阵
sub_matrix = matrix[matrix > 5]
print(sub_matrix)

代码解释:

  • matrix > 5 会生成一个布尔型的数组,其中元素大于 5 的位置为 True,其余为 False。
  • 当将这个布尔型数组作为索引时,会选取布尔型数组中为 True 的元素,在二维矩阵中,会返回一个一维数组,包含了满足条件的元素。 

 运行结果:

 方法四:使用 numpy 的 take 函数

import numpy as np# 创建一个示例矩阵
matrix = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])# 使用 take 函数获取子矩阵,选取第 0 行和第 2 行,第 1 列和第 3 列
sub_matrix = np.take(np.take(matrix, [0, 2], axis=0), [1, 3], axis=1)
print(sub_matrix)

代码解释:

  • np.take(matrix, [0, 2], axis=0) 首先从矩阵matrix中选取第 0 行和第 2 行,得到一个新的矩阵。
  • 然后 np.take(result, [1, 3], axis=1) 从新得到的矩阵中选取第 1 列和第 3 列,最终得到所需的子矩阵。

运行效果:

这些方法各有特点,可以根据不同的需求选择使用。切片操作最为直观和常用,适用于已知具体行和列范围的情况;高级索引 np.ix_ 可以灵活地选取不连续的行和列;条件筛选适用于根据元素的值来选取元素;np.take 函数在需要根据行和列的索引列表选取元素时比较方便。 

http://www.lryc.cn/news/522691.html

相关文章:

  • C++ 之多线程相关总结
  • EF Core全局查询筛选器
  • 【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
  • Objective-C语言的数据库交互
  • 基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践
  • 笔记(数据运营方向)
  • qt vs ios开发应用环境搭建和上架商店的记录
  • [cg] glDrawBuffers MRT的应用
  • IO模型与NIO基础二
  • 【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)
  • T-SQL语言的数据库交互
  • 【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)
  • 慧集通(DataLinkX)iPaaS集成平台-业务建模之域
  • 【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题
  • android wifi framework与wpa_supplicant的交互
  • 初学stm32 --- flash模仿eeprom
  • 使用C语言实现栈的插入、删除和排序操作
  • C语言程序环境和预处理详解
  • 基于机器学习随机森林算法的个人职业预测研究
  • 三种文本相似计算方法:规则、向量与大模型裁判
  • Python语言的计算机基础
  • Dify应用-工作流
  • 02.02、返回倒数第 k 个节点
  • Linux手写FrameBuffer任意引脚驱动spi屏幕
  • 怎么修复损坏的U盘?而且不用格式化的方式!
  • 语音技术在播客领域的应用(2)
  • 【Linux】应用层自定义协议与序列化
  • 深度学习中的张量 - 使用PyTorch进行广播和元素级操作
  • gitignore忽略已经提交过的
  • h5使用video播放时关掉vant弹窗视频声音还在后台播放