As you know, vectorized programming has many advantage places. It's neat, effienct, sometimes it is very short and much easier than writing long tedious loops code. When manipulate matrix or data, it is heavily focused on index. The logical indexing in matlab made many operations easy. Using a single or logical array as matrix subscript can filter the data you want easily.
Below are two examples I encountered these days. Using logical index it is very easy.
1. Write a function called separate_by_two that takes a matrix A of positive integers as an input
and returns two row vectors. The first one contains all the even elements of A and nothing else,
while the second contains all the odd elements of A and nothing else, both arranged according to
column-major order of A. You are not allowed to use for-loops or while loops.
matlab code:
function [r_even, r_odd] = separate_by_two(A)
C = A(:);
r_even = C(mod(C, 2) == 0)';
r_odd = C(mod(C, 2) == 1)';
end
Feedback: Your function performed correctly for argument(s) 1
Feedback: Your function performed correctly for argument(s) 2
Feedback: Your function performed correctly for argument(s) [1;2]
Feedback: Your function performed correctly for argument(s) [1;2;3;4;5;6;7;8;9;10]
Feedback: Your function performed correctly for argument(s) [1 2 3;4 5 6;7 8 9]
Feedback: Your function performed correctly for argument(s) [7 10 3 2 1;9 8 9 10 10;2 8 10 4 10;6 8 1 10 3;1 3 6 3 1]
Feedback: Your function performed correctly for argument(s) [21 71 22 87 38;83 94 98 32 34;40 71 13 75 85;13 37 71 44 17;64 45 3 56 28;7 97 72 33 67;69 97 25 74 89;84 14 98 27 18;25 34 26 17 39]
integer k as its two inputs and returns a matrix B that has the same size as A. The elements of B are
all divisible by k. If an element of A is divisible by k, then the corresponding element in B must
have the same value. If an element of A is not divisible by k, then the corresponding element of B
must be the product of the given element of A and k. You are not allowed to use any for-loops or
while-loops. For example, the call X = divvy([1 2; 3 4], 2) would make X equal to
[2 2; 6 4].
matlab code:
function B = divvy(A, k)
B = zeros(size(A, 1), size(A, 2));
divisable_index = find(mod(A, k) == 0);
B(divisable_index) = A(divisable_index);
none_divisable_index = find(mod(A, k) ~= 0);
B(none_divisable_index) = A(none_divisable_index) * k;
end
Feedback: Your function performed correctly for argument(s) [1 2 3 4 5 6 7 8 9 10], 2
Feedback: Your function performed correctly for argument(s) [1 2 3;4 5 6;7 8 9], 3
Feedback: Your function performed correctly for argument(s) [1 2 3;4 5 6;7 8 9], 1
Feedback: Your function performed correctly for argument(s) [15 5 18 13 11 18 2 14 11 13;15 16 20 9 9 19 12 14 1 19;7 14 13 13 14 6 3 10 6 6;3 19 16 18 15 18 10 5 8 12;5 10 12 4 10 5 18 20 15 2;3 12 17 20 11 10 18 5 3 16;10 20 4 14 15 14 2 16 19 8;7 5 14 18 9 18 19 7 15 20], 4
refer: Matrix Indexing in MATLAB