머신러닝(MachineLearning)/넘파이(NumPy)
넘파이(NumPy) - 인덱싱과 행렬에서의 활용
Danny1231
2022. 6. 22. 15:47
- 특정한 데이터만 추출하기
원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터가 반환된다.
import numpy as np
# 1부터 9까지 1차원 ndarray 생성
array1 = np.arange(start=1, stop=10)
# index는 0부터 시작하므로 3번째 값의 index는 2
print('세 번째 값:', array1[2])
실행 결과
세 번째 값: 3
- 슬라이싱(Slicing)
슬라이싱은 ndarray의 연속된 값들을 추출하는 방식이다. ':' 기호의 양 옆에 시작 인덱스와 종료 인덱스를 표시하면 시작 인덱스부터 종료 인덱스 -1위치에 있는 데이터의 ndarray를 반환한다.
# array1의 두 번째 값부터 일곱 번째 값 출력하기
print(array1[1:7])
실행 결과
[2 3 4 5 6 7]
- 팬시 인덱싱(Fancy Indexing)
리스트나 ndarray로 인덱스 집합을 지정하면 해당 위치의 인덱스에 해당하는 ndarray를 반환하는 방식이다.
array2 = array1.reshape(3, 3)
# 0, 1, 2 index를 가진 행, 0, 1 index를 가진 열의 데이터를 반환
print(array2[[0, 1, 2], 0:2])
실행 결과
[[1 2]
[4 5]
[7 8]]
- 불린 인덱싱(Boolean Indexing)
특정 조건에 해당하는지 여부인 True/False 값을 기반으로 True에 해당하는 인덱스 위치에 있는 데이터의 ndarray를 반환한다.
# 3 이상의 값만 출력하기
array3 = array1[array1 >= 3]
print(array3)
실행 결과
[3 4 5 6 7 8 9]
- sort()
넘파이에서 sort()를 호출하는 np.sort()의 경우 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬을 반환하지만, 행렬 자체에서 sort()를 호출하는 ndarray.sort()의 경우 원 행렬 자체를 정렬한 형태로 변환하며 반환 값은 None이다. sort()는 기본적으로 오름차순으로 정렬을 하며, 내림차순으로 정렬하기 위해서는 np.sort()[::-1]을 사용하면 된다. 행렬이 2차원 이상일 경우에 axis 축 값 설정을 통해 행 또는 열을 기준으로 정렬 방향을 설정할 수 있다.
org_array = np.array([3, 1, 9, 5])
print('원본 행렬:', org_array)
# np.sort()로 정렬하기
npsort_array = np.sort(org_array)
print('np.sort() 호출 후 반환된 정렬 행렬:', npsort_array)
print('np.sort() 호출 후 원본 행렬:', org_array)
# ndarray.sort()로 정렬하기
ndarraysort_array = org_array.sort()
print('org_array.sort() 호출 후 반환된 행렬:', ndarraysort_array)
print('org_array.sort() 호출 후 원본 행렬:', org_array)
# 내림차순 정렬하기
desc_array = np.sort(org_array)[::-1]
print('내림차순으로 정렬된 행렬:', desc_array)
# 2차원 배열 각 축 기준으로 정렬하기
array2d = np.array([[8, 12], [7, 1]])
array2d_sort_row = np.sort(array2d, axis=0)
array2d_sort_column = np.sort(array2d, axis=1)
print('행 방향으로 정렬:\n', array2d_sort_row)
print('열 방향으로 정렬:\n', array2d_sort_column)
실행 결과
원본 행렬: [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]
내림차순으로 정렬된 행렬: [9 5 3 1]
행 방향으로 정렬:
[[7 1]
[8 12]]
열 방향으로 정렬:
[[8 12]
[1 7]]
- 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]
- dot(), transpose()
두 행렬 A의 열 개수와 B의 행 개수가 동일할 때 np.dot()을 이용하여 내적을 구할 수 있다. np.transpose()를 이용하여 행렬의 전치 행렬을 구할 수 있다.
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8], [9, 10], [11, 12]])
dot_product = np.dot(A, B)
dot_product_transpose = np.transpose(dot_product)
print('dot_product:\n', dot_product)
print('dot_product_transpose:\n', dot_product_transpose)
실행 결과
dot_product:
[[58 64]
[139 154]]
dot_product_transpose:
[[58 139]
[64 154]]