MATLAB 逻辑数组

逻辑数组

  • 一般有两种情况我们会产生逻辑数组,如下:

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 是行向量或是列向量都不影响,因为在切片里面,都化为了一维索引。

find 函数

k = find(X,n)

  • 返回矩阵 X 中前 n 个非零元素的索引

  • 若省去 n 则返回所有非零元素索引

  • 若要查询等于 a 的位置,可以用 X == a 表示,同样查询小于 a 的位置可以用 X < a 表示

[row, col] = find(X,n)

  • 返回矩阵 X 中满足要求的横坐标和纵坐标


本文章使用limfx的vsocde插件快速发布