선형대수 프로그래밍을 지원하는 대표적 패키지
☑️ 많은 머신러닝 알고리즘이 넘파이 기반
➕ 루프를 사용하지 않고 대량 데이터의 배열 연산 가능
➖ 일반적으로 활용되는 데이터프레임으로 변환하려면 복잡한 함수 적용
→ 그래서 대부분의 데이터 핸들링을 판다스로 하게 됨
데이터프레임 ❓
import numpy as np
# np.array 함수 적용하면 리스트가 넘파이배열(ndarray)로 변환
array1 = np.array([1,2,3]) # 1차원 배열
array2 = np.array([[1,2,3],[5,6,7]]) # 2차원 배열
# '[' 수가 배열의 차원수
넘파이배열(ndarray)을 쉽게 만들고 형태도 변환할 수 있다.
1) ndarray 쉽게 만들기
arange_array = np.arange(5)
# output -> [0 1 2 3 4]
zero_array = np.zeroes((3,2), dtype='int32')
# output -> [[0 0] [0 0] [0 0]]
# 요소값이 모두 0인 2차원 배열 (요소 2개 1차원 배열 x 3)
# np.ones((n,e))
# 요소값이 모두 1인 2차원 배열 (요소 e개 1차원 배열 x n)
# dtype 값 정해주지 않으면 float 64
2) 차원과 크기 변경 → np.reshape()
arange_array = np.arange(10)
reshape_2_5 = arange_array.reshape(-1,5) # 5개 1차원 배열 기준
reshape_5_2 = arange_array.reshape(5,-1) # 요소수 5개 기준
# 2_5 -> [[0 1 2 3 4] [5 6 7 8 9]]
# 5_2 -> [[0 1] [2 3] [4 5] [6 7] [8 9]]
요소값을 순서대로 정렬할 수 있다.
(오름차순이 기본, 내림차순은 sort()[::-1]
)
1) np.sort(first_array) vs first_array.sort()
first_array = np.array([2,1,4,3)]
# np.sort(first_array) vs first_array.sort()
sort_array = np.sort(first_array)
# first_array -> [2 1 4 3] 그대로
# sort_array -> [1 2 3 4] (정렬 값을 본인이 가져감)
argsort_array = firstarray.sort()
# first_array -> [1 2 3 4]
# argsort_array -> None (희생하며 원본을 바꿈)
2) argsort() → 활용도가 매우 높음
# 정렬 후 인덱스 표시
# 매칭되어 있던 정보를 찾을 때 자주 활용됨
name_array = np.array(['a','b','c','d','e'])
score_array = np.array([20, 30, 10, 50, 40])
sorted_index = np.argsort(score_array)
# 정렬 후 섞인 인덱스 반환 -> [2 0 1 4 3]
name_array[sorted_index]
# [c a b e d] 반환
3) 2차원 행렬 정렬
# 2차원 행렬 정렬, axis =0:row / axis =1:column
array2d = np.array([[8,12],
[7,1]])
axis0 = np.sort(array2d, axis=0)
# [7, 1], <- 같은 row(세로) 비교 (8 과 7)
# [8, 12]
axis1 = np.sort(array2d, axis=1)
# [8, 12],
# [1, 7]] <- 같은 column(가로) 비교 (7 과 1)
넘파이는 매우 다양한 선형대수 연산을 지원한다.
그 중 가장 많이 사용되는 건 행렬 내적과 전치 행렬이다.
1) 행렬 내적 (행렬 곱) → np.dot()
a = np.array([[1,2,3],
[4,5,6]])
b = np.array([[1,2],
[3,4],
[5,6]])
dot_result = np.dot(a,b)
# array([22, 28],
# [49, 64]])
# (1,2,3 * 1,3,5), (1,2,3 * 2,4,6)
# (4,5,6 * 1,3,5), (4,5,6 * 2,4,6)
2) 전치 행렬 → np.transpose()
a = np.array([[1,2],
[3,4]])
transposed_array = np.transpose(a)
# [[1,3],
# [2,4]]