# MATLAB Language Vectorization Logical Masking

## Example

MATLAB supports the use of logical masking in order to perform selection on a matrix without the use of for loops or if statements.

A logical mask is defined as a matrix composed of only `1` and `0`.

For example:

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

is a logical matrix representing the identity matrix.

We can generate a logical mask using a predicate to query a matrix.

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

We first create a 3x3 matrix, `A`, containing the numbers 1 through 9. We then query `A` for values that are greater than 4 and store the result in a new matrix called `B`.

`B` is a logical matrix of the form:

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

Or `1` when the predicate `A > 4` was true. And `0` when it was false.

We can use logical matrices to access elements of a matrix. If a logical matrix is used to select elements, indices where a `1` appear in the logical matrix will be selected in the matrix you are selecting from.

Using the same `B` from above, we could do the following:

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

This would select all of the elements of `C` where `B` has a `1` in that index. Those indices in `C` are then set to `5`.

Our `C` now looks like:

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

We can reduce complicated code blocks containing `if` and `for` by using logical masks.

Take the non-vectorized code:

``````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
``````

This can be shortened using logical masking to the following code:

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

Or even shorter:

``````A = [1 3 5; 7 9 11; 11 9 7];
A(A > 5) = A(A > 5) - 2;
`````` PDF - Download MATLAB Language for free