# access the elements in a matrix given the column indexes

2 views (last 30 days)
zhang on 15 Aug 2013
For example x = [1 2 3 4; 5 6 7 8; 9 10 11 12]
Given the row indexes vector y = [1 3 4]; I'd like to get the associated elements : x(1, y(1)) = 1, x(2, y(2)) = 7, x(3, y(3)) = 12. [1 7 12]
Don't use loop.
THanks

dpb on 15 Aug 2013
Edited: dpb on 15 Aug 2013
iy=[1 3 4];
ix=[1:length(iy)];
y=x(sub2ind(size(x),ix',iy');
##### 2 CommentsShowHide 1 older comment
dpb on 15 Aug 2013
typo, yes...should be obvious. Corrected, thanks.

Jan on 15 Aug 2013
diag( x(:, y) )
Jan on 15 Aug 2013
in x(:, y) the colon operator returns all rows of the matrix x. the second argument 'y' does 'column selection', i.e. it picks only the interesting columns from x:
x(:, [1 2 4])
ans =
1 2 4
5 6 8
9 10 12
the values you are looking for obviously appear as diagonal elements in the result and can be extracted with the diag() function.
the reason why the intersting values are on the diagonal is pretty simple, allthough I admit, that one might must give it a second thought :)
I hope that helped!