当前位置:网站首页>Matlab矩阵(数组)元素过滤常见方法详解
Matlab矩阵(数组)元素过滤常见方法详解
2022-08-11 01:43:00 【撼山拔月】
一、引言
在使用Matlab矩阵或者数组时,有时需要对部分元素进行过滤,也就是把满足某些条件的元素替换为其它数据。本文针对矩阵(数组)元素过滤及应用给出了几种比较简单的方法。
二、矩阵(数组)元素过滤方法
1、利用find
示例1:获取矩阵中满足一定条件的元素组成新的数组。
a = [ -1, 2; 3, -1 ]
b = a( find(a > 0) )
则有输出:
a =
-1 2
3 -1
b =
3
2
此时b是一列向量。由于matlab存储矩阵是按照列方向存储的,所以3在前2在后。
2、利用逻辑表达式
示例2:把矩阵中大于零的元素置为无穷大,其它元素按照某个运算法则更改。
a = [ -1, 2; 3, -1 ]
b( a > 0 ) = Inf;
b( a <= 0 ) = a( a <= 0 ).^2 + 1;
b %此时b是列向量
输出结果:
a =
-1 2
3 -1
b =
2
Inf
Inf
2
如果希望b和a同维,则可以有如下两种方法:
1)方法一:先生成一个与a同维的全零矩阵
a = [ -1, 1; 1, -1; -1, 1 ];
b= zeros( size(a) );
b( a > 0 ) = Inf;
b( a <= 0 ) = a( a <= 0 ).^2 + 1;
b %此时b是和a同维的数组
输出结果:
b =
2 Inf
Inf 2
2 Inf
2)方法二:利用reshape更改列向量为矩阵
a = [ -1, 1; 1, -1; -1, 1 ];
b( a > 0 ) = Inf;
b( a <= 0 ) = a( a <= 0 ).^2 + 1;
b = reshape( b, size(a) )
输出结果:
b =
2 Inf
Inf 2
2 Inf
3、利用逻辑与
示例3:如果把矩阵的某一行或者某一列更改为其它值,操作很简单,例如把矩阵B的第一列置为0,可以如下操作:
B = [ 1, -1; 2, -2; -3, 3 ]
C = B;
C( :, 1 ) = 0
输出结果:
B =
1 -1
2 -2
-3 3
C =
0 -1
0 -2
0 3
示例4:如果要把某些指定位置的元素置为0,则可以类似于C语言中的按位与的操作来执行。先指定一个目标位置非0的矩阵,然后与给定矩阵做逻辑与,之后再点乘给定矩阵
B = [ 1, -1; 2, -2; -3, 3 ];
E = [ 1,1; 0,0; 1,0 ] %逻辑矩阵
D = (B & E) .* B
输出结果:
E =
1 1
0 0
1 0
D =
1 -1
0 0
-3 0
三、矩阵(数组)元素过滤简单应用
1、分段函数求值
示例5:简单分段函数
参考代码:
t = [ -1 : 0.1 : 1 ] * pi;
y( t <= 0 ) = -t( t <= 0 );
y( t > 0 ) = sin( t( t > 0 ) ).*2 + t( t > 0 );
plot( t, y )
运行结果:
示例6:复杂一点的分段函数
参考代码:
x = [ 1 : 20 ];
y( x >= 1 & x <= 5 ) = 6 - x(x >= 1 & x <= 5 );
y( x >= 6 & x <= 15 ) = 1;
y( x >= 16 & x <= 20 ) = x( x >= 16 & x <= 20 ) - 15;
xlen = length( x )
ylen = length( y )
plot( x, y, 'b' );
axis( [ 0, 21, 0, 6 ] );
运行结果:
2、利用已知的数组过滤其它数组
示例7:
a = [ -1, 1; 1, -1 ]
b = pascal( 2 )
b( a > 0 ) = 5
b( a+3 < b ) = 3
b( b < 2 ) = b( b < 2 ) + 2
运行结果:
a =
-1 1
1 -1
b =
1 1
1 2
b =
1 5
5 2
b =
1 3
3 2
b =
3 3
3 2
边栏推荐
- 数据库数据采集利器FlinkCDC
- paddle2.3和torch1.8在SentenceBert上的性能对比
- nvidia-smi详解
- Two-dimensional array combat project -------- "Minesweeper Game"
- 导入数据包上传宝贝提示“类目不能为空”是什么原因,怎么解决?
- Mysql database installation and configuration detailed tutorial
- Linux install redis database
- php 判断数组是否为多维数组
- 2022英伟达显卡排名天梯图
- 请讲一讲JS中的 for...in 与 for...of (下)
猜你喜欢
【iframe父页面调用子页面的方法】踩坑:获取元素的时候需要用 `[x]`是关键,不能用`.eq(x)`否则获取不到。
络达开发---自定义BLE服务(二):功能实现
两日总结十
如何防止离职员工把企业文件拷贝带走?法律+技术,4步走
数据库数据采集利器FlinkCDC
R language multiple linear regression, ARIMA analysis of the impact of different candidates in the United States on the economic GDP time series
Update chromedriver driver programming skills │ selenium
Section 4-6 of the first week of the second lesson: Appreciation of medical prognosis cases + homework analysis
微服务概念
【视频】报告分享|2021年保险行业数字化洞察
随机推荐
MySQL中的DDL常规操作总结
leetcode 739. Daily Temperatures 每日温度(中等)
MSTP——多生成树(案列+配置)
报考PMP需要做些什么准备?
Sigma development pays attention to details
21、阿里云oss
惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
Detailed explanation of the opkg of OpenWrt
简陋的nuxt3学习笔记
SQL语句--获取数据库表信息,表名、列名、描述注释等
【websocket】
install dlib library
nvidia-smi:控制你的 GPU
15 DOM 扩展
两日总结十
How to create an index when sql uses where and groupby?
Ambari迁移Spark2到其它机器(图文教程)
进程间通信方式(1)无名管道(全CSDN最用心的博主)
备战“金九银十”,软件测试功能 / 数据库 /linux/ 接口 / 自动化 / 测试开发面试真题解析
std::format格式化自定义类型