IT&개발/MachineLearning

왜 Numpy를 배워야 할까 -3 (행렬 정렬, 전치 행렬, ...)

nimoes._. 2024. 5. 23. 14:00
728x90
반응형

 

2024.05.21 - [PYTHON/MachineLearning] - 왜 Numpy를 배워야 할까? -2 (넘파이 인덱싱, ...)

 

왜 Numpy를 배워야 할까? -2 (넘파이 인덱싱, ...)

2024.05.21 - [PYTHON/MachineLearning] - 왜 Numpy를 배워야 할까? -1 왜 Numpy를 배워야 할까? -1 (배열 생성, 차원 변환, ...)1. Numpy 소개* Numpy 란? 넘파이(Numpy, Numerical Python)는 파이썬에서 과학적 계산을 위한

luvtako.tistory.com

- 넘파이 인덱싱 관련 내용은 이전 글 참고해주세요 :D


1. 행렬의 정렬 - sort( )와 argsort( )

* 행렬 정렬

- 넘파이의 행렬 정렬은 np.sort( )와 같이 넘파이에서 sort( )를 호출하는 방식과 ndarray.sort( )와 같이 행렬 자체에서 sort( )를 호출하는 방식이 있다. 

 

- np.sort( ) : 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬을 반환한다.

- ndarray.sort( ) : 원 행렬 자체를 정렬한 형태로 변환하며 반환 값은 None이다.

org_array = np.array([3, 1, 9, 5])
print('원본 행렬 :', org_array)
# np.sort( )로 정렬
sort_array1 = np.sort(org_array)
print('np.sort( ) 호출 후 반환된 정렬 행렬 :', sort_array1)
print('np.sort( ) 호출 후 원본 행렬 :', org_array)
# ndarray.sort( )로 정렬
sort_array2 = org_array.sort()
print('org_array.sort( ) 호출 후 반환된 행렬: ', sort_array2)
print('org_array.sort( ) 호출 후 원본 행렬: ', org_array)

 

[output]

원본 행렬 : [3 1 9 5]

np.sort( ) 호출 후 반환된 정렬 행렬 : [1 3 5 9]
np.sort( ) 호출 후 원본 행렬 : [3 1 9 5]

org_array.sort( ) 호출 후 반환된 행렬:  None
org_array.sort( ) 호출 후 원본 행렬:  [1 3 5 9]

- np.sort( )나 ndarray.sort( ) 모두 기본적으로 오름차순으로 행렬 내 원소를 정렬한다.

- 내림차순으로 정렬하기 위해서는 [::-1]을 적용한다.

sort_array1_desc = np.sort(org_array)[::-1]
print('내림차순으로 정렬 :', sort_array1_desc)

 

[output]

내림차순으로 정렬 : [9 5 3 1]

- 행렬이 2차원 이상일 경우에 axis 축 값 설정을 통해 로우 방향, 또는 칼럼 방향으로 정렬을 수행할 수 있다.

array2d = np.array([[8, 12], [7, 1]])

sort_array2d_axis0 = np.sort(array2d, axis = 0)
print('로우 방향으로 정렬 :\n', sort_array2d_axis0)

sort_array2d_axis1 = np.sort(array2d, axis = 1)
print('칼럼 방향으로 정렬 :\n', sort_array2d_axis1)

 

[output]

로우 방향으로 정렬 :
 [[ 7  1]
 [ 8 12]]
 
칼럼 방향으로 정렬 :
 [[ 8 12]
 [ 1  7]]


* 정렬된 행렬의 인덱스를 반환하기

- 원본 행렬이 정렬되었을 때 기존 원본 행렬의 원소에 대한 인덱스를 필요로 할 때 np.argsort( )를 이용한다.

- np.argsort( )는 정렬 행렬의 원본 행렬 인덱스를 ndarray 형으로 반환한다.

org_array = np.array([3, 1, 9, 5])
sort_indices = np.argsort(org_array)
print(type(sort_indices))
print('행렬 정렬 시 원본 행렬의 인덱스 :', sort_indices)

 

[output]

<class 'numpy.ndarray'>
행렬 정렬 시 원본 행렬의 인덱스 : [1 0 3 2]

- 오름차순이 아닌 내림차순으로 정렬 시에 원본 행렬의 인덱스를 구하는 것도 np.argsort( )[::-1]과 같이 [::-1]을 적용하면 된다.

org_array = np.array([3, 1, 9, 5])
sort_indices_desc = np.argsort(org_array)[::-1]
print('행렬 내림차순 정렬 시 원본 행렬의 인덱스 :', sort_indices_desc)

 

[output]

행렬 내림차순 정렬 시 원본 행렬의 인덱스 : [2 3 0 1]

* argsort( ) 활용하기

import numpy as np

name_array = np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
score_array = np.array([78, 95, 84, 98, 88])

sort_indices_asc = np.argsort(score_array)
print('성적 오름차순 정렬 시 score_array의 인덱스 :', sort_indices_asc)
print('성적 오름차순으로 name_array의 이름 출력 :', name_array[sort_indices_asc])

 

[output]

성적 오름차순 정렬 시 score_array의 인덱스 : [0 2 4 1 3]
성적 오름차순으로 name_array의 이름 출력 : ['John' 'Sarah' 'Samuel' 'Mike' 'Kate']

- 시험 성적순으로 학생 이름을 출력하고자 한다면 np.argsort(score_array)를 이용해 반환된 인덱스를 name_array에 팬시 인덱스로 적용해 추출 가능하다.

- 내림차순은 np.argsort(score_array)[::-1]로 바꿔주면 된다.


2. 선형대수 연산 - 행렬 내적과 전치 행렬 구하기

* 행렬 내적(행렬 곱)

- 행렬 내적은 행렬 곱이며, 두 행렬 A와 B의 내적은 np.dot( )을 이용해 계산이 가능하다.

- 두 행렬 A와 B의 내적은 왼쪽 행렬의 로우(행)와 오른쪽 행렬의 칼럼(열)의 원소들을 순차적으로 곱한 뒤 그 결과를 모두 더한 값이다.

A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8], [9, 10], [11, 12]])
dot_product = np.dot(A, B)
print('행렬 내적 결과 :\n', dot_product)

 

[output]

행렬 내적 결과 :
 [[ 58  64]
 [139 154]]

* 전치 행렬

- 원 행렬에서 행과 열 위치를 교환한 원소로 구성한 행렬을 그 행렬의 전치 행렬이라고 한다.

- 넘파이의 transpose( )를 이용해 전치 행렬을 쉽게 구할 수 있다.

A = np.array([[1, 2], [3, 4]])
transpose_mat = np.transpose(A)
print('A의 전치 행렬 :\n', transpose_mat)

 

[output]

A의 전치 행렬 :
 [[1 3]
 [2 4]]

 

 

* 참고 도서

 
파이썬 머신러닝 완벽 가이드
《파이썬 머신러닝 완벽 가이드》는 이론 위주의 머신러닝 책에서 탈피해, 다양한 실전 예제를 직접 구현해 보면서 머신러닝을 체득할 수 있도록 만들었습니다. 캐글과 UCI 머신러닝 리포지토리에서 난이도가 있는 실습 데이터를 기반으로 실전 예제를 구성했고, XGBoost, LightGBM, 스태킹 기법 등 캐글의 많은 데이터 사이언스에서 애용하는 최신 알고리즘과 기법을 상세하게 설명했습니다. 이번 개정2판에서는 최신 사이킷런 버전(1.0.2)을 포함해 책에서 사용되는 모든 라이브러리를 최신 버전으로 업그레이드한 실습 코드를 구현하고, 다양한 유형의 하이퍼파라미터를 가지는 XGBoost나 LightGBM 모델의 최적 하이퍼파라미터 튜닝을 위한 베이지안 최적화 기법 적용 실습을 제공합니다. 또한 머신러닝 관련 데이터 분석에 널리 쓰이는 시각화 라이브러리인 matplotlib과 seaborn의 활용법을 다룬 장을 새롭게 추가했습니다.
저자
권철민
출판
위키북스
출판일
2022.04.21
728x90
반응형