MATLAB: Take a lineout of a matrix, defined by a function

functionslineMATLABmatrix manipulationvectorization

Let M be an m by n matrix, let f:(1:m)->(1:n)
how can I create a vector that contains all the points that f hits?
Example:
Let:
M = [1 2 3;
4 5 6;
7 8 9]
and let j = f(i) = i
that is, my output vector should be v = [1 5 9]
or let j = f(i) = 4-i
in this case, v = [7 5 3]
or, more complicated, let j = f(i) = round(1+sqrt(i))
then v = [4 5 9]

Best Answer

i = 1:size(M,1);
f = @(i) i;
M(sub2ind(size(M), i, f(i)))
f = @(i) 4 - i;
M(sub2ind(size(M), i, f(i)))
f = @(i) round(1+sqrt(i));
M(sub2ind(size(M), i, f(i)))
Related Question