一般有两种情况我们会产生逻辑数组,如下:
A = [1, 2;3 nan];
B = A > 2;
C = isnan(A);第一种是用运算符 >、== 这样的,然后就可以得到一个与 A 相同大小的逻辑数组。满足条件的位置为逻辑 1,不满足条件的位置为逻辑 0
第二种就是一些以 is 开头的函数,可以进行一些类型的判断,比如上面的 isnan,判断每个元素是否为 nan
可以对逻辑数组进行逻辑运算,与 if 后面的逻辑有所区别,如下表:
符号 | 含义 |
|---|---|
& | 与 |
| | 或 |
~ | 非 |
xor(A, B) | 异或 |
all(A) | 是否全为非0 |
any(A) | 是否有0 |
与运算在 if 里面是 && 而在逻辑数组运算的时候是 & ,或运算也一样。
在筛选数组的时候,我们使用逻辑数组就会十分简便。
A = [1, 2, 3; 4, 5, 6];
B = A(A > 3);
C = A .* (A > 3);
D = A .* A > 3;B 是一个列向量,里面包含了大于 3 的所有值
C 是一个数组,里面小于等于 3 的值全部被置为 0
D 的运算顺序是先 .* 后 > 所以结果是逻辑数组
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
B = [1 0 1];
C = A(B == 1, :);
D = A(:, B == 1);以上的代码是经常碰到的情况,A 是一个 m * n 的矩阵,B 是一个向量,现在要根据 B 条件筛选 A
可以看到,用切片的形式写逻辑向量,就会根据 B == 1 所代表的逻辑 1 筛选行和列。
无论 B 是行向量或是列向量都不影响,因为在切片里面,都化为了一维索引。
返回矩阵 X 中前 n 个非零元素的索引
若省去 n 则返回所有非零元素索引
若要查询等于 a 的位置,可以用 X == a 表示,同样查询小于 a 的位置可以用 X < a 表示
返回矩阵 X 中满足要求的横坐标和纵坐标
本文章使用limfx的vsocde插件快速发布