NumPy 기본 사용법
데이터 핸들링의 기초 NumPy 기본 사용법 정리
Python 필수 라이브러리 NumPy 기본 사용법
NumPy란?
데이터 분석, 머신러닝 및 딥러닝에서 대부분의 데이터는 벡터와 행렬로 표현된다. Numpy는 Python 언어에서 기본으로 지원하지 않는 행렬과 같은 데이터 구조를 지원하며 수학/과학 계산 함수를 포함한다. 따라서 데이터 사이언스를 위한 기본적인 Numpy 사용법을 정리하였다.
- 참고: NumPy 공식 홈페이지 ‘Quickstart Tutorial’
NumPy는 Numerical Python의 줄임말로 고성능의 수치계산을 위해 제작되었다. C언어로 구현된 파이썬 라이브러리로써 벡터 및 행렬 연산이 매우 빠르며 편리한 기능을 제공한다.
NumPy에서는 기본적으로 array(배열)라는 단위로 데이터를 관리하며 연산을 수행한다. Array는 행렬의 개념이다. 따라서 다양한 선형대수 연산을 제공하며 N차원의 array 객체를 지원한다.
import numpy as np
# list
print(list(range(5)))
# [0, 1, 2, 3, 4]
# Numpy의 Array
print(np.array([0, 1, 2, 3, 4]))
# array([0, 1, 2, 3, 4])
배열 만들기
np.array
- 배열 생성np.zeros(shape)
- 0이 들어있는 배열 생성np.ones(shape)
- 1이 들어있는 배열 생성np.empty(shape)
- 초기화가 없는 값으로 배열을 반환np.arange(n, m, d)
- n~m까지 d간격으로 쪼개기. range와 동일np.linspace(n, m, k)
- n~m까지 k개로 쪼개기
np.zeros(10, dtype=int)
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.enes(10, dtype=int)
# array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
np.arange(0, 20, 2)
# array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.linspace(0, 1, 5)
# array([0. , 0.25, 0.5 , 0.75, 1. ])
난수 배열 생성
np.random로 다양한 난수가 들어있는 배열을 size대로 생성할 수 있다.
np.random.seed
: 시드 고정np.random.rand(size):
균등 분포를 따르는 난수 생성 (0~1 사이)np.random.randint(low, high, size)
: 정수값 난수 생성 (low~high 사이)np.random.randn(size)
: 표준정규분포 (-1~1 사이)- 표준편차/평균을 변경하고 싶다면 표준편차를 곱하고 평균을 더해서 사용 가능Z Ex. np.random.randn(10) * 0.1 + 5
np.random.normal(n, s, size)
: 정규분포(평균 n, 표준편차 s)를 따르는 난수 생성np.random.uniform(low, high, size)
: 균등 분포를 따르는 난수 생성 (low~high 사이)
np.random.rand(3)
# array([0.63201094, 0.70317091, 0.46477066])
np.random.randint(0,5,(3,5))
# array([[3, 9],
# [3, 2]])
np.random.randn(3)
# array([-1.72954903, -0.961878, -0.10157975])
np.random.normal(0, 1, (2, 2))
# array([[ 0.44050683, 0.04912487],
# [-1.67023947, -0.70982067]])
np.random.uniform(5, 10, 5)
# array([5.7274501 , 6.4652199 , 8.15371616, 8.89358985, 9.64812358])
배열의 정보
array.ndim
- 차원array.shape
- 모양array.size
- 크기(자료의 개수)array.dtype
- 배열이 담고 있는 요소들의 자료형: list와 다르게 array는 단일타입으로 구성array.astype(dtype)
- 자료형 변경
dtype | 설명 |
---|---|
int | 정수형 |
float | 실수형 |
str | 문자열 |
bool | 부울 |
배열의 모양 바꾸기
array.reshape(n,m)
np.concatenate([array1, array2, ..., arrayN], axis)
: axis=0 세로, axis=1 가로로 붙이기np.split(array, [index], axis)
: index 기준으로 나누기 (여러개 가능)
다양한 집계함수
- +, -, /, *, **: element-wise 산술 연산
np.sum(array)
: 합계np.max/min(array)
: 최대/최소값np.mean(array)
: 평균np.std(array)
: 표준편차np.var(array)
: 분산np.argmin/max(array)
: 최소/최대값의 index 반환np.where(array 조건)
: 조건에 맞는 값의 index 반환
마스킹 연산
조건을 만족하는 값만 따로 추출할 수 있다.
array[(array 조건1) (array 조건2)...]
array[(array < 3) | (array > 5)]
선형대수
A*B
: 행렬 인자(element-wise) 곱셈np.dot(A, B)
: 1차원 벡터 내적np.matmul(A, B)
: 2차원 행렬곱A.transpose()
,A.T
: 전치행렬np.linalg.inv(A)
: 역행렬
A = np.array([[1, 2], [2, 2]])
# [[1 2]
# [2 2]]
B = np.array([[1, 3], [0, 5]])
# [[1 3]
# [0 5]]
C = np.array([1, 2, 3])
D = np.array([4, 5, 6])
# element-wise 곱셈
print(A*B)
# [[ 1 6]
# [ 0 10]]
print(C*D)
# [ 4 10 18]
# 1차원 벡터 내적
print(np.dot(C, D))
# 32
# 2차원 행렬곱
print(np.matmul(A, B))
# [[ 1 13]
# [ 2 16]]
# 전치행렬
print(A.T)
# [[1 2]
# [2 2]]
# 역행렬
print(np.linalg.inv(A))
# [[-1. 1. ]
# [ 1. -0.5]]