查找满足条件的数组元素

这个例子展示了如何通过对数组应用条件来筛选数组的元素。例如,可以检查矩阵中的偶数元素,查找多维数组中所有0的位置,或者替换值数据。您可以组合使用关系运算符和逻辑运算符来执行这些任务。关系运算符(>,<,> =,< =,= =,~ =)对数组施加条件,通过将多个条件与逻辑运算符连接,可以应用多个条件,,,分别以符号表示&,|,~

应用单一条件

要应用单个条件,首先创建一个5×5矩阵,其中包含1到15之间的随机整数。重置随机数生成器到默认状态,以重现。

rng默认的5)=兰迪(15日
一个=5×513 2 3 3 10 14 5 15 7 12 9 15 14 13 14 14 15 8 12 15 10 15 13 15 11

使用的关系不到运营商,<,以确定的元素一个小于9。将结果存储在B

B = A < 9
B =5 x5逻辑阵列1 . 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

结果是一个逻辑矩阵。每个值在B表示一个逻辑1(真正的)或逻辑0()状态,表示的对应元素是否一个满足的条件< 9。例如,(1)13,所以B (1,1)是合乎逻辑的0()。然而,(1、2)2,所以B (1、2)是合乎逻辑的1(真正的)。

虽然B包含的信息哪一个元素一个小于9,它没有告诉你他们的是这样的。不用逐个元素比较两个矩阵,您可以使用B指数为一个

(B)
ans =8×12 2 5 3 8 3 7 1

结果是元素的列向量一个小于9。自B是逻辑矩阵,这个操作叫什么逻辑索引。在本例中,用作索引的逻辑数组与另一个数组大小相同,但这不是必需的。有关更多信息,请参见数组索引

有些问题需要关于位置满足条件而不是它们的实际值的数组元素。在本例中,可以使用找到函数定位中的所有元素一个小于9。

I = find(A < 9)
我=8×13 6 7 11 14 16 17 22

结果是线性指标的列向量。中的每个索引描述元素的位置一个它小于9,所以在实践中(我)返回相同的结果(B)。区别在于(B)使用逻辑索引,而(我)使用线性索引。

应用多个条件

你可以使用逻辑,,运算符将任意数量的条件应用于数组;条件的数量并不局限于一两个。

首先,使用逻辑运营商表示&,以指定两个条件:元素必须为小于9大于2。将条件指定为逻辑索引,以查看满足这两个条件的元素。

(< 9 & > 2)
ans =5×15 3 8 3 7

结果是中元素的列表一个它满足两个条件。请确保使用由逻辑运算符连接的单独语句指定每个条件。例如,不能通过指定上面的条件(2 < < 9),因为它的值是一个(2 < | < 9)

接下来,查找其中的元素一个这是小于9甚至编号

(< 9 & ~ mod (A, 2))
ans =3×12 2 8

结果是一个包含所有偶数元素的列表一个小于9。使用逻辑NOT运算符~转换矩阵国防部(2)成逻辑矩阵,用逻辑值表示1(真正的)位于一个元素能被2整除的位置。

最后,找到里面的元素一个这是小于9甚至编号不等于2

mod(A,2) & A~=2
ans = 8

结果是8,是偶数,小于9,不等于2。它是唯一的元素一个它满足所有三个条件。

使用找到函数来获得满足条件的元素的索引等于8。

求(A<9 & ~mod(A,2) & A~=2)
ans = 14

结果表明(14)= 8

替换满足条件的值

有时,同时更改几个现有数组元素的值是有用的。使用逻辑索引和简单的赋值语句替换数组中满足条件的值。

替换中所有值一个比10大的数。

(> 10)= 10
一个=5×510 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价值。

(~ = 10)= NaN
一个=5×510南南10南南10南南10南南10 10 10 10南南10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

最后,替换所有的一个使用0并应用逻辑的NOT运算符,~一个

(isnan (A)) = 0;C = ~
C =5 x5逻辑阵列1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

结果矩阵具有逻辑值1(真正的)代替值和逻辑0()来代替10。逻辑上的不操作,~一个,将数字数组转换为逻辑数组,使其符合以下要求返回逻辑矩阵0()值和C |返回逻辑矩阵1(真正的)的值。

另请参阅

|||||||