01. 대용량 데이터 연산 package(library) Numpy 실습
- http://www.numpy.org
1) 수학 및 배열 처리에 최적화된 library
2) 1차원 텐서: Vector, 1차원 배열의 형태, 의미 있는 데이터의 나열
3) 2차원 텐서: Matrix, 행렬의 형태, 벡터의 조합
4) 3차원 텐서: 3차원 배열, 흑백/칼라 이미지 1장
5) 4차원 텐서: 4차원 배열, 여러장의 흑백/칼라 이미지
6) NumPy의 random 서브패키지에는 난수를 생성하는 다양한 명령
① rand: 0부터 1사이의 균일(균등) 분포 난수 발생
② randn: 가우시안 표준 정규 분포 난수 발생(예: 시험 점수가 평균에 가장 많이 분포하는 형태)
(정규 분포(正規 分布, 영어: normal distribution) 또는 가우스 분포(Gauß 分布, 영어: Gaussian distribution))
③ randint: 균일 분포의 정수 난수 발생
1. 브로드 캐스팅
- 연산이 안되는 차원이 다른 행렬도 곱셈이 가능하도록 차원을 맞추어 주는 기능
1) 배열의 브로드캐스팅
- 배열의 연산
(출처: https://sacko.tistory.com/16)
(출처: https://sacko.tistory.com/16)
3) 배열의 차원
4) 위키에서 '차원' 검색
2. 행렬의 곱, 차원이 다른 행렬의 연산
- 3행 2열 X 2행 3열
. 첫번째 행렬의 열과 두번째 행렬의 행의 수가 일치해야 곱셈이 가능함.
. 결과는 첫번째 행렬의 행, 두번째 행렬의 열로 구성됨.
- np.matmul(): 2차원 형태의 행렬 곱하기 지원, 행렬곱
- np.dot(): 1차원 요소간 곱하기 및 다차원 행렬의 곱하기 지원, 내적곱(수학적인 일반적인 행렬곱)
1) ndarray를 사용해야 하는 이유는 다음과 같이 요약할 수 있다.
- ndarray는 numpy에서 지원하는 표준형인 벡터/행렬/텐서 를 저장한다.
- 많은 numpy 함수가 matrix가 아니라 ndarray를 반환한다.
- 요소 간 연산과 선형대수 연산에 대해선 명확히 구분되어 있다.
- 표준 벡터나 열벡터/행벡터를 표현할 수 있다.
▷ /python/notebook/package/numpy_test.ipynb
for i in range(0, 10, 1): # row: 0 ~ 9
for j in range(9, -1, -1): # col: 9 ~ 0
if (i == (9-j)):
y[i, j] = 1 * (i * 0.1)
print(y)
.....
# 행렬의 곱셈: 첫번째 행렬의 열과 두번째 행렬의 행이 같아야함.
# 결과: 첫번째 행렬의 행과 두번째 행렬의 열로 구성됨
v = np.array([[1, 2, 3], [4, 5, 6]]) # 2행 3열
w = np.array([[1, 1], [2, 2], [3, 3]]) # 3행 2열
print('v:', v.shape)
print('w:', w.shape)
print(v)
print(w)
print('----------------')
# print(v * w) # ERROR
print(v.dot(w)) # 2행 2열: 1 *1 + 2*2 + 3*3 = 1 + 4 + 9 = 14
.....
v = np.array([[1, 2]]) # 1행 2열
w = np.array([[1, 1], [2, 2], [3, 3]]) # 3행 2열
print('v:', v.shape)
print('w:', w.shape)
print(v)
print(w)
# print(v.dot(w)) # ERROR, 규칙 위배