필터 지우기
필터 지우기

How to sort out the matrix based on 1st column?

조회 수: 117 (최근 30일)
Sky Scrapper
Sky Scrapper 2019년 1월 30일
편집: Stephen23 2019년 1월 31일
Hello,
I have matrix, A= [ -95 0 1 0 1 0 1 0 1 1; -95 0 1 0 1 0 1 0 1 -1 ; 0 0 1 0 1 1 0 1 0 1 ; 0 0 1 0 1 1 0 1 0 -1 ; -76 0 1 1 0 0 1 0 1 1 ; -76 0 1 1 0 0 1 0 1 -1 ; 76 0 1 1 0 1 0 1 0 1 ; 76 0 1 1 0 1 0 1 0 -1 ; -76 1 0 0 1 0 1 0 1 1 ; -76 1 0 0 1 0 1 0 1 -1 ; 95 1 0 1 0 1 0 1 0 1 ; 95 1 0 1 0 1 0 1 0 -1 ];
I want to sort out the matrix in ascending order based on the 1st column but the condition is I will have to put 1st and 2nd rows together, 3rd and 4rth rows together and so on...Finally, after sorting I want to get,
B = [95 1 0 1 0 1 0 1 0 1; 95 1 0 1 0 1 0 1 0 -1; 76 0 1 1 0 1 0 1 0 1; 76 0 1 1 0 1 0 1 0 -1; 0 0 1 0 1 1 0 1 0 1; 0 0 1 0 1 1 0 1 0 -1; -76 0 1 1 0 0 1 0 1 1; -76 0 1 1 0 0 1 0 1 -1; -76 1 0 0 1 0 1 0 1 1 ;-76 1 0 0 1 0 1 0 1 -1; -95 0 1 0 1 0 1 0 1 1; -95 0 1 0 1 0 1 0 1 -1];
Look, in matrix A we have the value '-76' was repeated 4 times in 5th, 6th, 9th and 10 th rows. My condition is after 5th row, there must be 6th row. Also after 9th rows there must be 10 th row. The same will happen in case of other rows (e.g: for '-95' after 1st row there must be 2nd row, for '0' the after 3rd row it must be 4th row).
I find it is difficult to do. Could anyone please help me?

채택된 답변

Stephen23
Stephen23 2019년 1월 30일
편집: Stephen23 2019년 1월 31일
"How to sort out the matrix based on 1st column?"
The sortrows function is stable, in the sense that the order of any two rows will be the same after sorting if the rows have the same sorted values. So if you sort by only the first column AND rows one and two have the same value in the first column, then they will be in the same order in the output. This makes your task easy:
>> sortrows(A,-1)
ans =
95 1 0 1 0 1 0 1 0 1
95 1 0 1 0 1 0 1 0 -1
76 0 1 1 0 1 0 1 0 1
76 0 1 1 0 1 0 1 0 -1
0 0 1 0 1 1 0 1 0 1
0 0 1 0 1 1 0 1 0 -1
-76 0 1 1 0 0 1 0 1 1
-76 0 1 1 0 0 1 0 1 -1
-76 1 0 0 1 0 1 0 1 1
-76 1 0 0 1 0 1 0 1 -1
-95 0 1 0 1 0 1 0 1 1
-95 0 1 0 1 0 1 0 1 -1
Or perhaps (based on the pattern in the tenth column):
>> sortrows(A,[-1,-10])
ans =
95 1 0 1 0 1 0 1 0 1
95 1 0 1 0 1 0 1 0 -1
76 0 1 1 0 1 0 1 0 1
76 0 1 1 0 1 0 1 0 -1
0 0 1 0 1 1 0 1 0 1
0 0 1 0 1 1 0 1 0 -1
-76 0 1 1 0 0 1 0 1 1
-76 1 0 0 1 0 1 0 1 1
-76 0 1 1 0 0 1 0 1 -1
-76 1 0 0 1 0 1 0 1 -1
-95 0 1 0 1 0 1 0 1 1
-95 0 1 0 1 0 1 0 1 -1
  댓글 수: 1
Sky Scrapper
Sky Scrapper 2019년 1월 30일
woww..how simpler thought to solve the problem. It's working! Thanks a lot.

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

추가 답변 (0개)

카테고리

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