逻辑掩蔽
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]
或者当谓词 A > 4
为真时 1
。而且当它是假的时候。
我们可以使用逻辑矩阵来访问矩阵的元素。如果使用逻辑矩阵来选择元素,则将在你选择的矩阵中选择 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;