파이썬으로 수치해석, 통계 관련 기능(데이터 분석), AI를 구현하려고 할 때 Numpy는 가장 기본이 되는 모듈이다.
NumPy
행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리
☞ 리스트(List)에 비해 연산 처리 속도가 매우 빠름
☞ 반복문 없이 데이터 배열에 대한 처리를 지원함
☞ 선형대수 관련 다양한 기능 제공
☞ 내부 상당부분은 C나 포트란으로 작성되어 실행 속도도 빠른 편
☞ 보통 import numpy as np
로 많이 사용
☞ 리스트와 다르게 한 번 크기를 지정하면 변경 불가능.
크기를 변경하고 싶으면 Numpy array 다시 지정해야한다.
☞ 다이나믹 타이핑(dynamic typing) 지원 안함.
동적 타이핑(dynamic typing)
컴퓨터의 구조를 생각하지 않고 변수를 선언하는 것.
예를 들어a = 1
이라고 입력하면 컴퓨터가 스스로 a는 숫자라고 인식한다.
컴퓨터가 스스로 변수의 type을 인식해야해서 느리다.
정적 타이핑(static typing)
변수를 선언할 때 컴퓨터적 구조를 명시하는 것.
int a = 1
처럼..
파이썬은 보통 동적 타이핑을 사용하지만 numpy는 정적 타이핑을 사용해야함.
아래는 Numpy랑 List를 직관적으로 잘 보여주는 것 같아서 퍼왔다.
다차원 배열 객체.
Numpy의 n차원 배열 Ndarray
☞ Like 행렬 연산
☞ 크기 변경 불가
☞ 하나의 data type만 사용 가능
Numpy array 생성하기 : np.array() 사용
>> import numpy as np
>> a = [1,2,3,4] >> a1 = np.array(a) >> a1 array([1,2,3,4])
>> b = [[1,2,3,4],[5,6,7,8]] >> b1 = np.array(b) >> b1 array([[1,2,3,4],[5,6,7,8]])
*
dtype
: numpy array의 data type>> a1.dtype dtype('int32') >> b1.dtype dtype('int32')
원소의 형에 따라 데이터 type이 정해짐
보통 위와 같이 list를 선언해주고 np로 바꿔줌으로써 생성한다.
Numpy array 생성하기 : zeros, ones 사용
>> import numpy as np
zeros
: 0으로 구성된 배열 생성>> c1 = np.zeros(4) >> c1 array([0., 0., 0., 0.]) >> c1.dtype dtype('float64')
>> c2 = np.zeros((2,4)) >> c2 array([[0., 0., 0., 0.], [0., 0., 0., 0.]])
ones
: 1로 구성된 배열 생성>> d1 = np.ones((2,4)) >> d1 array([[1., 1., 1., 1.], [1., 1., 1., 1.]]) >> d1.dtype dtype('float64')
Numpy array 생성하기 : arrange 사용
arange
: range에 대응하는 함수.>> np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
행렬의 차원을 다루는 함수
ndim
: 배열의 차원>> a1.ndim #a1 = array([1,2,3,4]) 1 >> b1.ndim #b1 = array([[1,2,3,4],[5,6,7,8]]) 2
shape
: 행렬의 차원을 표현>> a1.shape (4,) >> b1.shape (2, 4)
reshape
: 배열의 차원 크기를 변경(요소 갯수는 유지)#b1 = array([[1,2,3,4],[5,6,7,8]]) >> b1.reshape(8,) array([1, 2, 3, 4, 5, 6, 7, 8]) # a1 = array([1,2,3,4]) >> a1.reshape(-1,1) #-1은 row 개수를 선정한다 array([[1], [2], [3], [4]]) >> a1.reshape(1,-1) array([[1, 2, 3, 4]])
flatten
: 배열을 1차원 형태로 변경# b1 = array([[1,2,3,4],[5,6,7,8]]) >> b1.flatten() array([1, 2, 3, 4, 5, 6, 7, 8])