행렬의 정렬 - sort()와 argsort()
- sort는 원 행렬은 그대로 유지, 원 행렬의 정렬된 행렬을 반환
- argsort는 원 핼영 자체를 정렬한 형태로 변환, 반환값은 None
In [1]:
import numpy as np
org_array = np.array([3, 1, 9, 5])
print('원본 행렬:', org_array)
#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)
원본 행렬: [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()[::-1]와 같이 적용
In [2]:
sort_array1_desc = np.sort(org_array)[::-1]
print('내림차순으로 정렬:', sort_array1_desc)
내림차순으로 정렬: [9 5 3 1]
In [3]:
#행렬이 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)
로우 방향으로 정렬:
[[ 7 1]
[ 8 12]]
칼럼 방향으로 정렬:
[[ 8 12]
[ 1 7]]
- np.argsort()으로 정렬된 행렬의 인덱스를 반환하기
In [5]:
org_array = np.array([3, 1, 9, 5])
sort_indices = np.argsort(org_array)
print(type(sort_indices))
print('행렬 정렬 시 원본 행렬의 인덱스:', sort_indices)
<class 'numpy.ndarray'>
행렬 정렬 시 원본 행렬의 인덱스: [1 0 3 2]
In [6]:
#내림차순으로 정렬 시 원본 행렬의 인덱스도 [::-1]적용
org_array = np.array([3, 1, 9, 5])
sort_indices_desc = np.argsort(org_array)[::-1]
print('행렬 내림차순 정렬 시 원본 행렬의 인덱스:', sort_indices_desc)
행렬 내림차순 정렬 시 원본 행렬의 인덱스: [2 3 0 1]
In [7]:
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])
성적 오름차순 정렬 시 score_array의 인덱스: [0 2 4 1 3]
성적 오름차순으로 name_array의 이름 출력: ['John' 'Sarah' 'Samuel' 'Mike' 'Kate']
선형대수 연산 - 행렬 내적과 전치 행렬 구하기
- 행렬 내적(행렬 곱), np.dot()으로 계산
In [8]:
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]]
- 전치 행렬, transpose()로 구함
In [9]:
A = np.array([[1, 2],
[3, 4]])
transpose_mat = np.transpose(A)
print('A의 전치 행렬: \n', transpose_mat)
A의 전치 행렬:
[[1 3]
[2 4]]
'Python > Numpy' 카테고리의 다른 글
넘파이 numpy (5) - concatenate(), 배열 합치기 (1) | 2023.05.22 |
---|---|
넘파이 numpy (4) - random 모듈(rand, randint, randn, choice, seed, etc) (0) | 2023.05.08 |
넘파이 numpy (2) - arange, reshape, indexing (0) | 2023.04.21 |
넘파이 numpy (1) - ndarray, dtype, astype (0) | 2023.04.21 |