逻辑索引意味着拥有一个与您正在考虑的矩阵大小相同的logical / 布尔矩阵。您可以将其用作您正在考虑的矩阵的输入,并且true 的任何位置都将成为输出的一部分。 false 的任何位置都不是输出的一部分。要执行logical 索引,您需要使用logical / 布尔运算符或条件来方便选择矩阵中的元素。
让我们专注于向量,因为它是最容易处理的。假设我们有以下向量:
>> A = 1:9
A =
1 2 3 4 5 6 7 8 9
假设我想检索所有大于或等于 5 的值。 logical 条件为 A >= 5。我们要检索A 中大于或等于5 的所有值。因此,如果我们执行A >= 5,我们会得到一个logical 向量,它告诉我们A 中的哪些值满足上述条件:
>> A >= 5
ans =
0 0 0 0 1 1 1 1 1
这肯定会告诉我们在A 的哪个位置满足条件。最后一步是将其用作A的输入:
>> B = A(A >= 5)
B =
5 6 7 8 9
酷!如您所见,不需要for 循环来帮助我们选择满足条件的元素。让我们更进一步。如果我想找到A 的所有偶数值怎么办?这意味着如果我们除以 2,余数将为零,即mod(A,2) == 0。让我们提取出这些元素:
>> C = A(mod(A,2) == 0)
C =
2 4 6 8
不错!所以让我们回到你的问题。给定您的矩阵A,让我们提取第 2 列。
>> col = A(:,2)
现在,我们要检查 #2 列中是否有任何一个等于某个值。那么我们可以为此生成一个logical 索引数组。让我们尝试使用 3 的值:
>> ind = col == 3;
现在您将有一个逻辑向量,告诉您哪些位置等于 3。如果您想确定 有多少 等于 3,您只需 sum 向上计算值:
>> s = sum(ind);
就是这样! s 包含多少个值等于 3。现在,如果您想编写一个函数,只显示多少个值等于某个用户定义的输入并显示此事件,您可以执行以下操作:
function checkVal(A, val)
disp(sum(A(:,2) == val));
end
很简单,我们提取A 的第二列,看看有多少值等于val。这会产生一个logical 数组,我们简单地总结一下有多少个 1。这将为您提供等于 val 的元素总数。
Troy Haskin 向您指出了一个非常好的链接,该链接更详细地讨论了 logical 索引:http://www.mathworks.com/help/matlab/math/matrix-indexing.html?refresh=true#bq7eg38。阅读该文章以了解有关如何掌握 logical 索引的更多详细信息。
祝你好运!