matlab矩阵查找,查找符合条件的数组元素

应用单个条件

要应用单个条件,请首先创建一个 5×5 矩阵,该矩阵包含介于 1 和 15 之间的随机整数。将随机数生成器重置为默认状态,以实现可再现性。

rng default

A = randi(15,5)

A = 5×5

13 2 3 3 10

14 5 15 7 1

2 9 15 14 13

14 15 8 12 15

10 15 13 15 11

使用小于号关系运算符 < 确定 A 中的哪些元素小于 9。将结果存储在 B 中。

B = A < 9

B = 5x5 logical array

0 1 1 1 0

0 1 0 1 1

1 0 0 0 0

0 0 1 0 0

0 0 0 0 0

结果为一个逻辑矩阵。B 中的每个值都表示为逻辑值 1 (true) 或逻辑值 0 (false) 的状态,以指示 A 的对应元素是否符合条件 A < 9。例如,A(1,1) 为 13,因此 B(1,1) 为逻辑值 0 (false)。但是,A(1,2) 为 2,因此 B(1,2) 为逻辑值 1 (true)。

虽然 B 包含有关 A 中哪些元素小于 9 的信息,但它不会指出这些元素的具体值是多少。您可以使用 B 创建 A 的索引,而不必逐元素比较这两个矩阵。

A(B)

ans = 8×1

2

2

5

3

8

3

7

1

结果为一个由 A 中小于 9 的元素组成的列向量。由于 B 为逻辑矩阵,因此该运算称为逻辑索引。在本例中,用作索引的逻辑数组与另一个数组的大小相同,但这不是必需的。有关详细信息,请参阅数组索引。

某些问题需要符合条件的数组元素的位置信息,而非其实际值。在此示例中,您可以使用 find 函数查找 A 中小于 9 的所有元素。

I = find(A < 9)

I = 8×1

3

6

7

11

14

16

17

22

结果为一个由线性索引组成的列向量。每个索引描述 A 中一个小于 9 的元素的位置,因此实际上 A(I) 与 A(B) 返回的结果相同。差别在于 A(B) 使用逻辑索引,而 A(I) 使用线性索引。

应用多个条件

您可以使用逻辑 and、or 和 not 运算符将任意多个条件应用于一个数组;条件的数量并不局限于一个或两个。

首先,使用逻辑 and 运算符(由 & 表示)指定两个条件:元素必须小于 9 且大于 2。将这些条件指定为逻辑索引,以查看符合两个条件的元素。

A(A<9 & A>2)

ans = 5×1

5

3

8

3

7

结果为 A 中同时符合这两个条件的元素的列表。务必使用单独的语句指定每个条件,并用逻辑运算符连接起来。例如,您不能通过 A(2

接下来,查找 A 中小于 9 且为偶数的元素。

A(A<9 & ~mod(A,2))

ans = 3×1

2

2

8

结果为 A 中小于 9 的所有偶数元素的列表。使用逻辑 NOT 运算符 ~ 将矩阵 mod(A,2) 转换为逻辑矩阵,并在可被 2 整除的元素位置放置逻辑值 1 (true)。

最后,查找 A 中小于 9、为偶数且不等于 2 的元素。

A(A<9 & ~mod(A,2) & A~=2)

ans = 8

结果 8 为偶数、小于 9 并且不等于 2。该元素是 A 中符合所有三个条件的唯一元素。

使用 find 函数获取等于 8 的元素(符合这些条件)的索引。

find(A<9 & ~mod(A,2) & A~=2)

ans = 14

结果指示 A(14) = 8。

替换符合条件的值

有时,同时更改多个现有数组元素的值会很有用。将逻辑索引与简单的赋值语句一起使用,可替换数组中符合条件的值。

将 A 中大于 10 的所有值替换为数值 10。

A(A>10) = 10

A = 5×5

10 2 3 3 10

10 5 10 7 1

2 9 10 10 10

10 10 8 10 10

10 10 10 10 10

然后,将 A 中不等于 10 的所有值替换为 NaN 值。

A(A~=10) = NaN

A = 5×5

10 NaN NaN NaN 10

10 NaN 10 NaN NaN

NaN NaN 10 10 10

10 10 NaN 10 10

10 10 10 10 10

最后,将 A 中的所有 NaN 值替换为 0,并应用逻辑 NOT 运算符 ~A。

A(isnan(A)) = 0;

C = ~A

C = 5x5 logical array

0 1 1 1 0

0 1 0 1 1

1 1 0 0 0

0 0 1 0 0

0 0 0 0 0

生成的矩阵用逻辑值 1 (true) 取代 NaN 值,用逻辑值 0 (false) 取代 10。逻辑 NOT 运算 ~A 将数值数组转换为逻辑数组,因此 A&C 返回逻辑值 0 (false) 的矩阵,A|C 返回逻辑值 1 (true) 的矩阵。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值