728x90
Numpy 기초
배열의 종류
- 스칼라 (scalar)
- 0 차원 데이터라고 한다.
- 단순한 값
- scalar_val = 10
- 벡터 (vector)
- 1차원 배열이라고 한다.
- 스칼라가 연속적으로 모여있는 것.
- vector_val = [1, 2, 3]
- 벡터 내에 데이터가 N가 있으면 N 차원 벡터라고 한다.
- 행렬 (matrix)
- 2차원 배열이라고 한다.
- 1차원 배열인 벡터가 여러 개 모여있는 것.
- matrix_val = [ [1,2,3], [4,5,6]]
- 텐서 (tensor)
- 3차원 이상의 배열을 의미한다.
- Tensorflow는 뭘까요...?
- 텐서의 개념을 이용하면 모든 배열의 모양을 이야기 할 수 있다.
- 스칼라 - 0 Rank Tensor
- 벡터 - 1 Rank Tensor
- 행렬 - 2 Rank Tensor
다차원 배열 만들기
- np.arange : 1차원 정수 배열 만들 때 사용
- np.zeros : 0 으로 채워진 0 벡터(zero-vector)를 만들 때 사용
- np.ones : 1로 채워진 1 벡터(one-vector)를 만들 때 사용
- np.full : 지정한 숫자로 채워진 벡터를 만들 때 사용
- zeros, ones, full 전부다 벡터 뿐만이 아닌, 텐서까지도 생성이 가능
단위 행렬 만들기
- np.eye
- 단위 행렬 : 대각선의 방향의 원소가 1이고, 나머지는 0인 행렬
정수 랜덤 샘플링 하기
- np.random.choice
- 랜덤 샘플링 : 일정한 범위 내에서 필요한 정수를 랜덤으로 추출
- 딥러닝에서는 mini-batch를 만들 때 사용합니다.
arr1과 arr2는 같은 배열일까요? No
- arr1은 1차원 배열, arr2는 2차원 배열
arr1과 arr2는 같은 벡터일까요? Yes
- arr1은 numpy에는 행벡터의 모양을 하고 있지만 실제로는 열벡터이다.
- arr2는 열의 수가 1개인 열벡터의 모양을 하고 있다.
대부분의 머신러닝 라이브러리( sklearn, tensorflow, pytoch, caffe 등 )는 기본적인 데이터 취급을 열벡터로 하기 때문에 2차원 배열 이상부터 취급이 가능하다.
2차원 데이터 이상부터 전치행렬 변환이 가능하다.
axis 이해하기
axis : 축. 축이란? 데이터가 추가되는 방향
예를 들어 3차원 배열 (3, 4, 5)
- 3차원 배열에 추가되는건? 2차원 배열
- 2차원 배열에 추가되는건? 1차원 배열
- 1차원 배열에 추가되는건? 0차원 스칼라
차원수 확장하기
- 보통 기초 딥러닝에서 이미지 분석을 위한 CNN을 활용할 때 데이터를 전처리하기 위해 사용된다.
- tensorflow는 tf.newaxis, numpy는 np.newaxis를 활용해서 추가 차원을 만들어 낼 수 있다.
tensorflow에서 CNN을 위한 이미지 데이터의 형태는 항상 (N, H, W, C)를 유지한다.
- N : BATCH_SIZE ( 이미지의 개수 )
- H : 이미지의 세로 픽셀 ( 세로 크기 )
- W : 이미지의 가로 픽셀 ( 가로 크기 )
- C : 이미지의 채널 수( 컬러이미지 RGB : 3, 흑백이미지 GRAYSCALE : 1 )
여러분들이 이미지를 크롤링을 했어요. 만약에 이미지가 흑백 이미지 라면 가로, 세로 크기 밖에 없어요 (H, W)로 이루어진 2차원 배열입니다. 이걸 4차원 배열 형태로 바꿔줘야만 해요
브로드 캐스팅
- 차원 수가 다른 배열끼리의 연산
- 차원이 달라도 0차원 스칼라의 개수가 똑같으면 연산이 가능
- 저차원의 배열을 고차원으로 확장
- 수학적으로는 고차원 배열의 shape과 똑같은 일벡터를 만들어서 저차원 배열과 곱한 배열을 만들어 계산
전치행렬 만들기
- 행렬 A의 행과 열의 인덱스를 바꾼 것을 전치행렬 이라고 한다.
- A(i,j)의 위치를 A(j,i)로 바꾼 것
- 보통 Transpose했다고 이야기 한다.
728x90