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