罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

逻辑索引——多个条件

我讲逻辑索引之前的一些相关文章,但最近的工作让我想再炫耀它。关于逻辑索引的好处之一是,它是非常容易和自然结合的结果不同的条件选择项基于多个标准。

内容

逻辑索引是什么?

假设我有一个整数数组,不排序,想找到那些少于一定数量。下面是我可以使用的功能找到

X = randperm(20)目标= 5;
X = 1到13列3 7 1 16 20 15 13 9 14 8 11 19 18列14到20 4 10 5 6 17 12 2
印第安纳州=找到(X <目标)
印第安纳州= 1 3 14 20

你可以看到,发现返回索引数组X值小于目标。我们可以使用这些提取的值。

Xtarget = X(印第安纳州)
Xtarget = 3 1 4 2

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

logInd = X <目标
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中的元素控股1 s匹配值的地方X所需的值,否则0。数组logInd不是一个双数字数组,而是有课吗逻辑

logInd
类属性名称大小字节logInd 1 x20的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小于目标甚至是。这是很自然的与逻辑索引。我们已经有我们需要的代码。

compoundCondInd = (X <目标)& iseven (X)
compoundCondInd =列1到13 0 0 0 0 0 0 0 0 0 0 0 0 0列14到20 1 0 0 0 0 0 1

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

X (compoundCondInd)
答2 = 4

你注意了吗?

你看到是多么容易结合多个条件?我只是寻找每个条件,恢复逻辑阵列,然后计算逻辑阵列(通过两个输入数组都是如此&)。当然,我可以计算一个复合条件只有两个条件需要真正的使用逻辑或(通过|)。

最近的应用程序

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

你使用复合索引吗?

你像我一样,用逻辑表达式吗?或者你使用其他技术吗?你想实现你的复合索引?请让我知道在这里




发表与MATLAB®R2012b


  • 打印

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。