일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 너비우선탐색
- 현대엔지니어링 수요예측
- 사회조사분석사 2급 필기 요약정리
- 사회조사분석사2급실기신청
- 사회조사분석사 2급 필기 공부방법
- 2월공모주
- 사회조사분석사2급실기신청꿀팁
- 사회조사분석사 2급 필기 시험시간
- 파이썬 정렬
- 알고리즘
- 사회조사분석사 2급 독학
- 현대엔지니어링
- 백준 알고리즘
- 시물레이션
- 공모주 청약
- 사이킷런
- 오미크론 자가격리
- 사회조사분석사 2급 기출문제집
- 공모주청약
- DFS
- 사회조사분석사 2급
- BFS
- 그리디
- 정렬
- 공모주
- 벽부수고이동하기 파이썬
- 백준
- 머신러닝
- 사회조사분석사 2급 접수
- 사회조사분석사 2급 공부방법
- Today
- Total
세상을 바꾸는 데이터
[Numpy] 넘파이 - 행렬(Matrix) 본문
넘파이(Numpy)의 행렬(Matrix)에 대해 알아보자.
행렬 정렬
넘파이의 행렬 정렬은 대표적인 방법인 np.sort( )와 ndarray.sort( ), argsort( )가 있다.
- np.sort( )
- ndarray.sort( )
- argsort( )
np.sort( )의 경우 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬을 반환하며, ndarray.sort( )는 원 행렬 자체를 정렬한 형태로 변환하며 반환 값은 None이다.
org_array = np.array([ 3, 1, 9, 5])
print('원본 행렬:', org_array) # [3 1 9 5]
# np.sort( )로 정렬
sort_array1 = np.sort(org_array)
print ('np.sort( ) 호출 후 반환된 정렬 행렬:', sort_array1) # [1 3 5 9]
print('np.sort( ) 호출 후 원본 행렬:', org_array) # [3 1 9 5]
# ndarray.sort( )로 정렬
sort_array2 = org_array.sort()
org_array.sort()
print('org_array.sort( ) 호출 후 반환된 행렬:', sort_array2) # None
print('org_array.sort( ) 호출 후 원본 행렬:', org_array) # [1 3 5 9]
np.sort( )나 ndarray.sort( ) 모두 기본적으로 오름차순으로 행렬 내 원소를 정렬한다. 내림차순으로 정렬하기 위해서는 [::-1]을 적용해야 한다. 즉 np.sort( )[::-1]과 같이 사용하면 된다.
sort_array1_desc = np.sort(org_array)[::-1]
print ('내림차순으로 정렬:', sort_array1_desc) # [9 5 3 1]
행렬이 2차원 이상일 경우에는 axis 축 값 설정을 통해 로우, 칼럼 방향으로 정렬을 수행할 수 있다.
array2d = np.array([[8, 12],
[7, 1 ]])
sort_array2d_axis0 = np.sort(array2d, axis=0) # axis=0은 행 방향으로 정렬
print('로우 방향으로 정렬:\n', sort_array2d_axis0)
# [[7 1]
# [8 12]]
sort_array2d_axis1 = np.sort(array2d, axis=1) # axis=1은 열 방향으로 정렬
print('컬럼 방향으로 정렬:\n', sort_array2d_axis1)
# [[8 12]
# [1 7]]
정렬된 행렬의 인덱스 반환하기
원본 행렬이 정렬되었을 때 기존 원본 행렬의 원소에 대한 인덱스를 필요로 할 시 np.argsort( )를 이용한다.
np.argsort( )는 정렬 행렬의 원본 행렬 인덱스를 ndarray 형태로 반환한다.
org_array = np.array([ 3, 1, 9, 5])
sort_indices = np.argsort(org_array)
print('행렬 정렬 시 원본 행렬의 인덱스:', sort_indices) # [1 0 3 2]
argsort( )는 넘파이에서 데이터 추출 시 매우 활용도가 높다. 예를 들어 시험 성적순으로 학생 이름을 출력하고자 한다면...
name_array=np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
score_array=np.array([78, 95, 84, 98, 88])
# score_array의 정렬된 값에 해당하는 원본 행렬 위치 인덱스 반환하고 이를 이용하여 name_array에서 name값 추출.
sort_indices = np.argsort(score_array)
print("sort indices:", sort_indices) # [0 2 4 1 3]
name_array_sort = name_array[sort_indices]
score_array_sort = score_array[sort_indices]
print(name_array_sort) # ['John' 'Sarah' 'Samuel' 'Mike' 'Kate']
print(score_array_sort) # [78 84 88 95 98]
선형대수 연산 - 행렬 내적과 전치 행렬 구하기
행렬 내적(행렬 곱)은 np.dot( )을 이용해 계산이 가능하다.
- np.dot( )
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)
# 행렬 내적 결과:
# [[ 58 64]
# [139 154]]
원 행렬에서 행과 열 위치를 교환환 원소로 구성한 행렬을 전치 행렬이라고 한다. 행렬 A의 전치 행렬은 A^T와 같이 표시한다. 넘파이의 transpose( )를 이용해 전치 행렬을 쉽게 구할 수 있다.
- np.transpose( )
A = np.array([[1, 2],
[3, 4]])
transpose_mat = np.transpose(A)
print('A의 전치 행렬:\n', transpose_mat)
# A의 전치 행렬:
# [[1 3]
# [2 4]]
Reference
https://github.com/chulminkw/PerfectGuide
https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC
https://www.javatpoint.com/python-program-to-sort-the-elements-of-an-array-in-descending-order
https://www.sharpsightlabs.com/blog/numpy-sort/
https://www.headboost.jp/numpy-argsort/
https://codetorial.net/numpy/functions/numpy_dot.html
https://datascienceparichay.com/article/numpy-transpose/
'ML > Numpy' 카테고리의 다른 글
[Numpy] 넘파이 - 인덱싱(Indexing) (1) | 2022.01.19 |
---|---|
[Numpy] 넘파이 - ndarray 생성 및 데이터 타입 (2) | 2022.01.17 |
[Numpy] Intro (2) | 2022.01.17 |