当前位置:网站首页>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
边栏推荐
- winform下的富文本编辑器
- nvidia-smi:控制你的 GPU
- 软件测试面试题:软件测试的过程的V模型,说出它的缺点?
- 【服务器数据恢复】raid5崩溃导致lvm信息和VXFS文件系统损坏的数据恢复案例
- std::format格式化自定义类型
- Experiment record of Shengxin (part3)--scipy.spatial.distance_matrix
- FPGA learning column (xinlinx) serial communication -
- [GXYCTF2019]BabySQli
- The statistical data analysis, interview manual"
- 两日总结十一
猜你喜欢
络达开发---自定义BLE服务(二):功能实现
【Video】Report Sharing | 2021 Insurance Industry Digital Insights
Lianshengde W801 series 6-Analyze the Bluetooth communication source code of W801 from the perspective of WeChat applet (indicate method)
R语言多元线性回归、ARIMA分析美国不同候选人对经济GDP时间序列影响
[ASM] The relationship between the role of the bytecode operation ClassWriter COMPUTE_FRAMES and visitMaxs
请讲一讲JS中的 for...in 与 for...of (下)
年薪30W,BAT抢着要,懂面试技巧的测试人究竟多吃香?
一次简单的 JVM 调优,拿去写到简历里
SQL语句--获取数据库表信息,表名、列名、描述注释等
MySQL indexes and transactions
随机推荐
22、库存服务
研发项目流程规范
Deep Learning [Chapter 2]
C # - delegate detailed usage
MySQL进阶查询
联盛德W801系列6-从微信小程序的角度来分析W801的蓝牙通信源码(indicate方式)
两日总结十
惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
【Video】Report Sharing | 2021 Insurance Industry Digital Insights
英伟达 GPU 架构简史
分库分表ShardingSphere-JDBC笔记整理
2022英伟达显卡排名天梯图
进程间通信方式(1)无名管道(全CSDN最用心的博主)
SQL statement--get database table information, table name, column name, description comment, etc.
C# string与stream的相互转换
OpenWrt之opkg详解
微服务概念
zerorpc:async=True can be written as **{“async“: True}
第二课第一周第4-6节 医学预后案例欣赏+作业解析
Engineering Design of Single-sided PCB Routing Impedance