[Matlab] 행렬 | 특정 열 기준으로 내림차순 나열한 행렬 구하기 | 크기순, 오름차순

2021. 3. 18. 17:34·수학

아래 행렬의 두번째 열은 [2 1 6 3]' 이다.

   1   2   3
   2   1   5
   4   6   4
   2   3   2

 

이 두번째 열의 수 기준으로 크기 역순 나열한 행렬을 구하고 싶다. (내림차순)

   4   6   4
   2   3   2
   1   2   3
   2   1   5

 

어떻게 해야 하는가?

 


먼저, 주어진 행렬을 v라고 하자. 

 


1.

  먼저 필요한 것은, 원래 행렬 v의 2열 정보이다.

모든 행의 2열 정보가 필요하다. 

즉, v(:, 2)가 필요하다.

 

2.

  2열은 [2 1 6 3]'인 상태다. 이 행렬을 크기순으로 나열해서 y라는 변수에 넣자.

y = sort(v(:, 2))

y는 즉 [1 2 3 6]'이 된다!

 

 


3.

  하지만 2열을 크기순으로 나열하기만 하는 것은 의미가 없다. 크기순으로 나열한 각 수에 대한 본래 행번호가 어떻게 되는지도 함께 알아야 한다. 결국 목적은 행을 재배치하는 것이기 때문이다.

 

이를 위해 함께 필요한 것은, sort() 이전의 2열 인덱스이다. 즉, v(:, 2)라는 행렬의 인덱스가 필요하다.

행 순서대로 2열의 수를 뽑아냈기 때문에, 2열의 인덱스 순서는 행 순서가 된다.

 

 

 


4.

  이제 여기서 in이라는 변수를 추가하여 여기에 각 수의 인덱스 정보를 담을 것이다. 

[y, in] = sort(v(:, 2))라고 입력하면, 아래와 같은 결과가 나온다. sort된 [1 2 3 6]'에 대응하여, in에는 [2 1 4 3]'이라는 인덱스정보(행)가 담긴다.

 

 

사실 이 단계는 나도 이해가 아직 잘 안간다. sort를 해도 v(:, 2)행렬의 인덱스 정보를 기억하고 있는 것인가? 어떤 매커니즘으로 in변수에 [2 1 4 3]'이 담기는지 잘 모르겠다. sort()를 했으면 뭔가 sort()된 결과의 행렬에 대한 인덱스가 새로 부여될 것만 같은데, 어째서 sort()이전의 v(:, 2)행렬에 대한 인덱스와 호응이 되는지 모르겠다.  

 

아시는 분 댓글로 말해주시면 안될까요?

ㅠㅠ 무플인 내 블로그에서 사실 기대하는 것은 없다.. 교수님께 여쭤봐야겠다. 


5. 

  이제 초기에 주어진 행렬 v를 재배치해야한다. 단계 4에서 우리는 sort()된 [1 2 3 6]'이라는 행렬을 얻었으며 in이라는 index변수에 이 수들과 대응하는 행인 [2 1 4 3]'행렬을 담았다. 이 인덱스 행렬을 이용해서 v행렬의 행을 재배치할 것이다. 다음과 같다. 

 

 

in변수에 담긴 인덱스행렬은 sort()된 행렬 [1 2 3 6]'에 대응하기 때문에, in행렬의 성분은 '뒤에서부터' 뽑아내야 우리가 원하던 내림차순의 2열로 정리할 수 있다.

 

그래서 v(행,열) 구조의 '행' 부분은 'in(end:-1:1)'로 작성한다. 그리고 모든 열을 나열할 것이기 때문에 '열'부분은 ':'로 작성한다. 

 

그래서 완성했다!

2열의 수의 크기 역순으로 행을 재배치하기. 

2열 수의 내림차순으로 행을 재배치하기. 

반응형

'수학' 카테고리의 다른 글

[Matlab] 행렬을 그래프로 그리기 | Plotting Arrays | plot, stem, bar  (0) 2021.03.18
[Matlab] 벡터를 그래프로 그리기 | Plotting Arrays | plot, stem, bar  (0) 2021.03.18
[Matlab] 10의 거듭제곱 수열 만들기  (0) 2021.03.18
[Matlab] 시그마 연산 예제  (0) 2021.03.18
[Matlab] Matrix 계산 | 행렬 계산  (0) 2021.03.16
'수학' 카테고리의 다른 글
  • [Matlab] 행렬을 그래프로 그리기 | Plotting Arrays | plot, stem, bar
  • [Matlab] 벡터를 그래프로 그리기 | Plotting Arrays | plot, stem, bar
  • [Matlab] 10의 거듭제곱 수열 만들기
  • [Matlab] 시그마 연산 예제
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (389)
      • 미분류글 (32)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (59)
      • yyeeennyy (25)
  • 공지사항

    • ^o^/♡
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
히어로맛쿠키
[Matlab] 행렬 | 특정 열 기준으로 내림차순 나열한 행렬 구하기 | 크기순, 오름차순
상단으로

티스토리툴바