罗兰关于MATLAB的艺术

将想法转化为MATLAB

逻辑索引 - 多种条件

我谈过逻辑索引在某些联系帖子之前,但最近的工作让我想再次展示。关于逻辑索引的一个很好的事情是,将不同条件的结果结合起来,选择不同条件的结果是非常简单,自然的。

内容

什么是逻辑索引?

假设我有一个整数数组,没有排序,想要找到小于某个数字的整数。下面是我如何使用这个函数来完成它找到

X = randperm(20) target = 5;
X =列1到13 3 7 111 16 20 15 13 9 14 8 11 19 18 14至20 4 10 5 6 17 12 2
IND =查找(x <目标)
IND = 1 3 14 20

你可以看到find返回了数组的下标X具有小于的值目标.我们可以用这些来提取值。

Xtarget = X(印第安纳州)
2 .你的目标是什么

完成相同结果的另一种方法是使用逻辑表达式直接执行索引操作。这就是我的意思。

logInd = X < target
Logind =列1到13 1 0 1 0 0 0 0 0 0 0 0 0 0列14到20 1 0 0 0 0 0 1

MATLAB返回一个匹配数组元素的数组X,每个元素的匹配值都为1X是所需的值,否则为0.阵列LOGIND.不是双位数数组,而是有类吗逻辑

LOGIND.
名称大小字节类属性logInd 1x20 20逻辑

我现在可以使用此阵列从中提取所需的值X

XtargetLogical = X (logInd)
XtargetLogical = 3 1 4 2

这两个方法都返回结果。

isequal (Xtarget XtargetLogical)
ans = 1

复合条件。

让我创建一个返回true的匿名函数(逻辑(1))对于甚至是整数的值。

Iseven = @(x)〜逻辑(rem(x,2))
iseven = @ (x) ~逻辑(rem (x, 2))

测试iseven

ISEVEN(1:5)
ans = 0 1 0 1 0

查找满足多个条件的值

现在我想找到价值X那不到目标甚至是。对于逻辑索引,这是非常自然的。我们已经有了需要的代码片段。

复合Condind =(x <目标)和iseven(x)
compoundCondInd = column 1 to 13 0 0 0 0 0 0 0 0 0 0 column 14 to 20 1 0 0 0 0 0 1

我们可以看到我们在位置3和19中找到了合适的值。我们可以接下来提取这些值。

X (compoundCondInd)
2 .单词conduct联想记忆:

你注意到了吗?

你看到组合多个条件有多容易了吗?我只是查找每个条件,得到逻辑数组,然后计算一个逻辑数组,其中两个输入数组都为真(通过).当然,我可以使用逻辑或(通过|)计算一个复合条件,其中只有一个条件需要为真。

最近的应用程序

我最近在查找可疑数据值时使用了这个方法。我有两个数组,每小时的温度和速度。问题是,当温度接近或低于冰点时,速度传感器可能会冻结。但我不想删除所有冰点以下的值。所以我寻找温度足够低且速度非常低的数据(这可能意味着传感器被冻结了)。这样,我就不需要在低温下丢弃所有数据。

你用过复合索引吗?

你用逻辑表达式做到了吗?或者你使用了其他一些技术吗?你想要通过复合索引来实现什么?让我知道这里




发布与MATLAB®R2012b

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击这里登录您的MathWorks帐户或创建新的。