主要内容

查找符合条件的数组元素

此示例显示如何通过将条件应用于数组来过滤数组的元素。例如,您可以检查矩阵中的均匀元素,在多维数组中找到所有0的位置,或替换数据中的值。您可以使用关系和逻辑运算符的组合执行这些任务。关系运营商(><> =<===.〜=)在阵列上施加条件,您可以通过将它们与逻辑运算符连接来应用多个条件或者, 和不是,分别由符号表示|, 和

申请单一条件

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

RNG.默认a = randi(15,5)
A =5×513 2 3 3 10 14 5 15 7 1 2 9 15 14 13 14 15 8 12 15 10 15 13 15 11

使用关系少于操作员,<,确定哪些元素一种小于9.存储结果B.

b = <9
B =5x5逻辑阵列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真的)或逻辑0.错误的)状态以指示相应的元素一种满足条件一个<9。例如,A(1,1)13., 所以b(1,1)是逻辑0.错误的)。然而,a(1,2)2, 所以B(1,2)是逻辑1真的)。

虽然B.包含有关的信息哪一个元素一种小于9,它并没有告诉你他们的东西价值是。您可以使用,而不是将两个矩阵元素进行比较B.索引一种

a(b)
ans =.8×12 2 5 3 8 3 7 1

结果是元素的列向量一种这不到9.自从B.是一个逻辑矩阵,调用此操作逻辑索引。在这种情况下,用作索引的逻辑阵列与其他阵列的大小相同,但这不是要求。有关更多信息,请参阅数组索引

有些问题需要有关的信息地点符合条件而不是实际值的数组元素。在此示例中,您可以使用找到所有元素的函数一种小于9。

我=找到(a <9)
我=8×13 6 7 11 14 16 17 22

结果是线性指数的列向量。每个索引都描述了元素的位置一种这少于9,所以在实践中a(i)返回相同的结果a(b)。不同的是a(b)使用逻辑索引,而a(i)使用线性索引。

申请多个条件

您可以使用逻辑或者, 和不是运营商将任意数量的条件应用于阵列;条件的数量不限于一两个。

首先,使用逻辑操作员,表示,指定两个条件:要素必须是小于9.大于2。将条件指定为逻辑索引,以查看满足两个条件的元素。

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

结果是元素的列表一种满足两个条件。请务必使用逻辑运算符连接的单独语句指定每个条件。例如,您无法在上面指定的条件a(2 ,因为它评估了a(2

接下来,找到元素一种那是小于9.甚至编号

a(a <9&〜mod(a,2))
ans =.3×12 2 8.

结果是所有偶数元素的列表一种这少于9.使用逻辑不运算符,〜,转换矩阵mod(a,2)进入逻辑矩阵,具有逻辑值1真的)位于其中一个元素均匀可被2均匀。

最后,找到内容一种那是小于9.甚至编号不等于2

A(a <9&〜mod(a,2)&a〜= 2)
ans = 8.

结果8,甚至,小于9,不等于2.它是唯一的元素一种满足所有三种条件。

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

查找(a <9&〜mod(a,2)&a〜= 2)
ans = 14.

结果表明a(14)= 8

替换符合条件的值

有时它可以同时更改几个现有数组元素的值是有用的。使用简单的赋值语句使用逻辑索引来替换符合条件的数组中的值。

替换所有值一种那大于10的10。

a(a> 10)= 10
A =5×510 2 3 3 10 10 5 10 7 11 2 9 10 10 10 10 10 8 10 10 10 10 10 10 10 10

接下来,替换所有值一种这不等于10价值。

a(a = 10)= nan
A =5×510NAN NaN NaN NaN1010naN10naNaN NaN NaN NaN10 10 10 10 10 naN10 10 10 10 10 10 10 10

最后,更换所有价值一种使用零并应用逻辑而不是运算符,〜A.

a(Isnan(a))= 0;c =〜a
C =5x5逻辑阵列0 1 1 1 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0

生成的矩阵具有逻辑的值1真的)代替值和逻辑0.错误的)代替10s。逻辑不操作,〜A.,将数字数组转换为逻辑阵列,使其成为逻辑阵列A&C.返回逻辑矩阵0.错误的)值和A | C.返回逻辑矩阵1真的)值。

也可以看看

|||||||