How to get index of each points in data?

조회 수: 1 (최근 30일)
ha ha
ha ha 2017년 11월 18일
편집: KL 2017년 11월 18일
Let's say:
A= [ 111 111 111 22 %index 1
999 999 999 11 %index 2
555 555 555 44 %index 3
222 222 222 33] %index 4
If I want to reorder the rows in matrix A by sorting the elements of column 4 in ascending order, I will use this code:
sort_cell=arrayfun(@(c) sortrows(A,c),[4],'uniform',0);
% generate a cell by sorting matrix A in ascending of column 4
sort_A=sort_cell{:};
% convert cell "sort_cell_A" to matrix
The result will as follows:
sort_A= [ 999 999 999 11
111 111 111 22
222 222 222 33
555 555 555 44 ]
My question is: How can I get back the index matrix from "sort_A" matrix? I hope the result will be:
index=[2
1
4
3]

채택된 답변

KL
KL 2017년 11월 18일
편집: KL 2017년 11월 18일
Simply use sortrows,
>> [B,index] = sortrows(A,4)
B =
999 999 999 11
111 111 111 22
222 222 222 33
555 555 555 44
index =
2
1
4
3
and below link has all you need:

추가 답변 (2개)

Are Mjaavatten
Are Mjaavatten 2017년 11월 18일
>> [~,ix] = sort(A(:,4))
ix =
2
1
4
3
>> sort_A = A(ix,:)
sort_A =
999 999 999 11
111 111 111 22
222 222 222 33
555 555 555 44

Stephen23
Stephen23 2017년 11월 18일
편집: Stephen23 2017년 11월 18일
Your code would be much simpler if you called sort on the required column:
>> [~,idx] = sort(A(:,4))
idx =
2
1
4
3
>> B = A(idx,:)
B =
999 999 999 11
111 111 111 22
222 222 222 33
555 555 555 44
To get back the original order, call sort again on the indices:
>> [~,idy] = sort(idx)
idy =
2
1
4
3
>> C = B(idy,:)
C =
111 111 111 22
999 999 999 11
555 555 555 44
222 222 222 33

카테고리

Help CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by