NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리이다.
다차원배열을 효과적으로 다루기 위해 ndarray(N-Dimesional Array) 사용
ndarray는 Tensorflow Tensor와 pandas DataFrame의 기반
설치 및 사용
pip install numpy : 설치
import numpy as np : import numpy로도 가능하지만
코드에서 좀 더 편하게 사용하기 위해 np로 사용하는 것이 좋다.
1차원은 단독주택이라고 생각하면 된다. flatten 이미지
2차원은 하나의 아파트. 흑백이미지 1개
3차원은 아파트 여러 동(1동, 2동,,,). 컬러이미지 1개, 흑백이미지 여러개
4차원은 아파트 단지(1단지, 2단지, 3단지). 컬러이미지 여러개
a1 = np.array([1,2,3]) # 1차원 행렬 만들기
-> [1,2,3]
a2 = np.array([[1,2,3], [4,5,6]]) # 2차원 행렬 만들기
-> [[1, 2, 3],
[4, 5, 6]]
a3 = np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) # 3차원 행렬 만들기
-> ([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
대괄호의 개수로 차원을 판단([[ 2개면 2차원, [[[[ 4개면 4차원)
1. a3.ndim # a3의 차원 확인
-> 3
2. a3.shape # a3의 모양(shape) 확인
-> (2, 2, 2) # (채널, 가로(행), 세로(열)) 또는 (가로(행), 세로(열), 채널)
3. a3.size # a3의 크기 확인
-> 8 # size는 shape안의 수를 다 곱한 수 ex) (2, 2, 2) 2*2*2=8
4. a3.dtype # a3의 자료형 확인
-> dtype('int32')
ar = np.arange(6) # 파이썬의 for range와 유사 ex) arange(6)면 0 부터 6까지의 숫자를 배열로 만듦
-> array([0, 1, 2, 3, 4, 5])
ar2 = np.arange(1,10,2) # arange(시작 숫자, 끝 숫자, 스텝)
-> array([1, 3, 5, 7, 9])
ar3 = np.arange(6).reshape(2,3) # reshape는 차원을 바꿔준다. 1차원인걸 2차원으로 변경
# 단, 전체 사이즈 수(element수)가 동일해야한다 ex) 6과 2*3=6이 같아야한다.
-> array([[0, 1, 2],
[3, 4, 5]])
# 0으로 채움
1. np.zeros(2) # 1차원
-> [0. 0.]
2. np.zeros((2,3)) # 2차원
-> [[0. 0. 0.]
[0. 0. 0.]]
3. np.zeros([2,2,3]) # 3차원
-> [[[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]]]
# 1로 채움
np.ones([2,2,3]) # zeros와 마찬가지로 1로 채움
-> [[[1. 1. 1.]
[1. 1. 1.]]
[[1. 1. 1.]
[1. 1. 1.]]]
# 3. np.full(shape, 채울값)
# shape를 지정하고 전체값을 '채울값'으로 지정
np.full((2,3),100)
-> array([[100, 100, 100],
[100, 100, 100]])
element-wise 연산(같은 위치의 값 끼리 연산)
행렬 곱셈(matrix multiplication)
(A 행렬의 열의 개수) = (B 행렬의 행의 개수) 일 때만 곱셈 가능
A 행렬의 i행 성분과 B 행렬의 j열 성분을 차례대로 곱하여 더한 값이 (i,j)성분
행렬의 모양(shape)이 다른경우 shape를 맞춘 후 연산
연산이 가능한 형태로 자동 reshape한 후, 반복된 값으로 자동 할당하여 연산을 수행
** 참고