Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MATLAB indexing question

I have a matrix, for example

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

and a vector of size 1x3 which specifies which element in each row is the one I'm looking for - i.e. If

vector = [ 1 2 1 ]

then the desired output is

[ 1 5 7 ]

since 1 is the 1'st element in the 1'st row, 5 is the 2'nd in the 2'nd row, and 7 is the 1'st element in the 3'rd row.

How do I achieve this? Couldn't find a built in function to do this, which surprised me.

like image 798
dan Avatar asked Jan 30 '11 10:01

dan


1 Answers

MATLAB provides the SUB2IND function to convert rows/columns subscripts to linear indices:

>> A = [1 2 3; 4 5 6; 7 8 9];
>> idx = sub2ind(size(A),1:3,[1 2 1]);  %# rows: [1 2 3], cols: [1 2 1]
>> A(idx)
     1     5     7
like image 99
Amro Avatar answered Sep 26 '22 14:09

Amro