Take a lineout of a matrix, defined by a function

1 view (last 30 days)
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]

Accepted Answer

Thorsten
Thorsten on 6 Jul 2015
Edited: Thorsten on 6 Jul 2015
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)))

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!