Matlab矩阵(数组)元素过滤常见方法详解

一、引言

在使用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

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值