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

조회 수: 2 (최근 30일)
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.

채택된 답변

Walter Roberson
Walter Roberson 2013년 3월 30일
편집: Walter Roberson 2013년 3월 30일
Use sub2ind()
  댓글 수: 3
Walter Roberson
Walter Roberson 2013년 3월 30일
Oops, yes, I was concentrating on not putting an "s" in and so left out the "2" :(
Cedric
Cedric 2013년 3월 30일
I thought that you had forgotten the "s" and I ended up realizing that it was a "2" ;-)

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Anand
Anand 2013년 3월 30일
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
Cedric
Cedric 2013년 3월 30일
편집: Cedric 2013년 3월 30일
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).

댓글을 달려면 로그인하십시오.


Piment
Piment 2013년 3월 30일
편집: Piment 2013년 3월 30일
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
Cedric
Cedric 2013년 3월 30일
Walter's answer and my illustration should work; just replace M with A and I with idx.
Piment
Piment 2013년 3월 30일
thank you both, it really does work.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by