how to index a matrix by using a index matrix that has same size?

2 Ansichten (letzte 30 Tage)
I have a m by n data matrix and a m by n index matrix which rearranges the order of the n elements in each row of the data matrix. How can I get an indexed data matrix without using loop? Thanks.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 30 Mär. 2013
Bearbeitet: Walter Roberson am 30 Mär. 2013
Use sub2ind()
  3 Kommentare
Walter Roberson
Walter Roberson am 30 Mär. 2013
Oops, yes, I was concentrating on not putting an "s" in and so left out the "2" :(
Cedric
Cedric am 30 Mär. 2013
I thought that you had forgotten the "s" and I ended up realizing that it was a "2" ;-)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Anand
Anand am 30 Mär. 2013
If A is your original matrix and idx is the matrix of indices, you can use logical indexing: A(idx).
Here's an example:
>> A = rand(3)
A =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> idx = [9 8 7;6 5 4;3 2 1]
idx =
9 8 7
6 5 4
3 2 1
>> A(idx)
ans =
0.9575 0.5469 0.2785
0.0975 0.6324 0.9134
0.1270 0.9058 0.8147
  1 Kommentar
Cedric
Cedric am 30 Mär. 2013
Bearbeitet: Cedric am 30 Mär. 2013
This is linear indexing actually; the idx matrix that you defined is essentially what we get after calling sub2ind() with a third arg that is a matrix of column indices for each row (different from linear index).

Melden Sie sich an, um zu kommentieren.


Piment
Piment am 30 Mär. 2013
Bearbeitet: Piment am 30 Mär. 2013
to be more specific, it's something like(it's actually 300 by 5500 in my case):
A =
0.9649 0.4854 0.9157
0.1576 0.8003 0.7922
0.9706 0.1419 0.9595
0.9572 0.4218 0.6557
idx =
1 3 2
3 1 2
2 1 3
3 2 1
  2 Kommentare
Cedric
Cedric am 30 Mär. 2013
Walter's answer and my illustration should work; just replace M with A and I with idx.
Piment
Piment am 30 Mär. 2013
thank you both, it really does work.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by