jupyter notebook을 사용하다보면
import numpy as np
이 코드는 안 쓴적이 없는 것 같다,,그만큼이나 자주 쓰는 넘파이. 오늘은 Numpy에 대해서 알아보자
수치 데이터를 다루는 파이썬 패키지입니다. Numpy의 핵심이라고 불리는 다차원 행렬 자료구조인 ndarray를 통해 벡터 및 행렬을 사용하는 선형 대수 계산에서 주로 사용됩니다. Numpy는 편의성뿐만 아니라, 속도면에서도 순수 파이썬에 비해 압도적으로 빠르다는 장점이 있습니다.
pip install numpy
conda install -y numpy
를 통해 간단히 설치할 수 있다.
Numpy의 핵심은 ndarray입니다. np.array()는 리스트, 튜플, 배열로 부터 ndarray를 생성합니다. 파이썬 자료구조 중 하나인 리스트를 가지고 1차원 배열을 생성할 수 있다.
# 1차원 배열
vec = np.array([1, 2, 3, 4, 5])
print(vec)
[1 2 3 4 5]
# 2차원 배열
mat = np.array([[10, 20, 30], [ 60, 70, 80]])
print(mat)
[[10 20 30]
[60 70 80]]
print('vec의 타입 :',type(vec))
print('mat의 타입 :',type(mat))
vec의 타입 : <class 'numpy.ndarray'>
mat의 타입 : <class 'numpy.ndarray'>
vec의 타입 : <class 'numpy.ndarray'>
mat의 타입 : <class 'numpy.ndarray'>
print('vec의 축의 개수 :',vec.ndim) # 축의 개수 출력
print('vec의 크기(shape) :',vec.shape) # 크기 출력
np.zeros()는 배열의 모든 원소에 0을 삽입
zero_mat = np.zeros((2,3))
print(zero_mat)
np.arange(n)은 0부터 n-1까지의 값을 가지는 배열을 생성
range_vec = np.arange(10)
print(range_vec)
내부 데이터는 변경하지 않으면서 배열의 구조를 바꿉니다. 0부터 29까지의 숫자를 생성하는 arange(30)을 수행한 후, 원소의 개수가 30개이므로 5행 6열의 행렬로 변경할 수 있다.
reshape_mat = np.array(np.arange(30)).reshape((5,6))
print(reshape_mat)
[[ 0 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]]
ndarray를 통해 만든 다차원 배열은 파이썬의 자료구조인 리스트처럼 슬라이싱(slicing) 기능을 지원합니다. 슬라이싱 기능을 사용하여 특정 행이나 열들의 원소들을 접근할 수 있다.
mat = np.array([[1, 2, 3], [4, 5, 6]])
print(mat)
[[1 2 3]
[4 5 6]]
mat = np.array([[1, 2], [4, 5], [7, 8]])
print(mat)
[[1 2]
[4 5]
[7 8]]
Numpy를 사용하면 배열간 연산을 손쉽게 수행할 수 있습니다. 덧셈, 뺄셈, 곱셈, 나눗셈을 위해서는 연산자 +, -, *, /를 사용할 수 있으며 또는 np.add(), np.subtract(), np.multiply(), np.divide()를 사용할 수 있다.