MATLAB逻辑掩蔽

示例

MATLAB支持使用逻辑掩码,以便在矩阵上执行选择,而无需使用for循环或if语句。

逻辑掩码定义为仅由1和组成的矩阵0。

例如:

mask = [1 0 0; 0 1 0; 0 0 1];

是表示单位矩阵的逻辑矩阵。

我们可以使用谓词来查询矩阵来生成逻辑掩码。

A = [1 2 3; 4 5 6; 7 8 9];
B = A > 4;

我们首先创建一个3x3矩阵,A其中包含数字1到9。然后查询A大于4的值,并将结果存储在名为的新矩阵中B。

B 是以下形式的逻辑矩阵:

B = [0 0 0
     0 1 1
     1 1 1]

或1当谓词A > 4为真时。而0当它是错误的。

我们可以使用逻辑矩阵来访问矩阵的元素。如果使用逻辑矩阵选择元素,1则将从您要选择的矩阵中选择出现在逻辑矩阵中的索引。

使用B上面的内容,我们可以执行以下操作:

C = [0 0 0; 0 0 0; 0 0 0];
C(B) = 5;

这将选择所有的元素C,其中B有一个1在指数。C然后将中的那些索引设置为5。

我们C现在看起来像:

C = [0 0 0
     0 5 5
     5 5 5]

我们可以减少包含逻辑掩码if和for使用逻辑掩码的复杂代码块。

采取非矢量化的代码:

A = [1 3 5; 7 9 11; 11 9 7];
for j = 1:length(A)
  if A(j) > 5
    A(j) = A(j) - 2;
  end
end

可以使用以下代码的逻辑掩码将其缩短:

A = [1 3 5; 7 9 11; 11 9 7];
B = A > 5;
A(B) = A(B) - 2;

甚至更短:

A = [1 3 5; 7 9 11; 11 9 7];
A(A > 5) = A(A > 5) - 2;