Machine Learning/Tensorflow

12. 대용량 데이터 연산 package, numpy

728x90

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, 규칙 위배