access the elements in a matrix given the column indexes

2 Ansichten (letzte 30 Tage)
zhang
zhang am 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

Antworten (2)

dpb
dpb am 15 Aug. 2013
Bearbeitet: dpb am 15 Aug. 2013
iy=[1 3 4];
ix=[1:length(iy)];
y=x(sub2ind(size(x),ix',iy');
  2 Kommentare
Matt Kindig
Matt Kindig am 15 Aug. 2013
I believe that first line is not valid Matlab syntax.
dpb
dpb am 15 Aug. 2013
typo, yes...should be obvious. Corrected, thanks.

Melden Sie sich an, um zu kommentieren.


Jan
Jan am 15 Aug. 2013
how about
diag( x(:, y) )
  4 Kommentare
zhang
zhang am 15 Aug. 2013
Yes, you're right. I'm just curious why does this work? can you give a little bit more explanation?
Jan
Jan am 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!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by