딥러닝을 사용하면서 넘파이를 맨날 사용할텐데, 어떻게 사용하는지 알아보자.
(numpy는 수학 계산을 사용하기 정말 쉽게 해놓은 라이브러리)
1) Creating Numpy Arrays, Shape, Rank, Flattening
import numpy as np
a = np.array([ [1,2], [3,4], [5,6] ]) # 행렬 생성하기
a.shape # a의 (행,열)이 나옴. >>> (3,2)
a.ndim # a의 차원이 나옴 >>> 2
len(a.shape) # a의 차원이 나옴 >>> 2
a[1,1] # a의 1행 1열의 원소는 무엇이냐 >>> 4
a[-1,0] # -1은 제일 마지막을 뜻함. 따라서 a[-1,0]은 3행 1열의 값, a[0,-1]은 1행 2열의 값
a = a.flatten() # a의 차원이 다 사라짐 >>> a가 그냥 1행으로 만들어져버림.

* 주의
numpy는 할당한 배열을 바꾸는 것을 선호하지 않음. 따라서 무조건 할당을 해줘야 한다!
a.flatten()같은 경우도, a 자체를 바꾸지 않음.
a.sort()와 sorted(a)와 다른 것처럼, 비슷한 개념을 가진 numpy.
2) Array Reshaping
개인적으로 정말 중요한 명령어라고 생각함. (실제로 많이 쓴 것 같음)
a = a.reshape( (2, -1) )
np.reshape(a, (2,-1))
위 두 개는 같은 코드.

보다시피, 할당 안 하면 안 바뀜.
아무튼 (2,-1)이 무엇을 뜻하냐면, 원래 a는 3행 2열짜리 (총 6개의 element) -> 이 6개 elem을 가지고 2행으로 만들어줘 라는 뜻.
(2,-1)에서 -1은, 빈 부분은 너 맘대로 할당하라는 뜻.
a는 (3,2)
np.reshape(a, (2,-1))는 (2,3)
np.reshape(a, (-1,3))은 (2,3)

이것도 됩니다.
a = np.reshape(np.array(range(1,13)), (-1,4))

행은 알빠아니고, 열을 4개로 만들어주세요. 요청하는 것임.

느낌 아시겠죠?
3) Creating Various Arrays and Data Types
- 영행렬
a = np.zeros( (2,2) ) # 2행2열짜리 영벡터
- 유닛행렬
a = np.ones( (1,2) ) # 1은 행, 2는 열
- 정방행렬
a = np.eye(2) # 2*2짜리 정방행렬
- random 행렬
a = np.random.random( (2,2) )

4) Array Indexing

이러한 a 행렬이 있을 때

1은 0,1행과 1,2열로 슬라이싱
2는 1행과 1,2열로 슬라이싱
3은 2번과 같아보이지만, 중요한 차이는 dimension, 즉 a의 차원이 유지 된다는 것! 따라서 2차원임을 알 수 있다.
4는 모든 행을 살리고, 1,2열로 슬라이싱 한 결과가 나오게 된다.

'AI' 카테고리의 다른 글
| [논문리뷰] 의료 데이터에 적합한 medGAN (method review) (1) | 2024.09.03 |
|---|---|
| 베이지안 네트워크 이해하기 (1) - BN으로 합성 데이터 만들기 실습 (0) | 2024.08.21 |
| [딥러닝] 기초 - Learning Curves 이해하기 (0) | 2024.04.13 |
| [딥러닝] Feature Scaling (0) | 2024.04.11 |
| [머신러닝] 3 Kinds of Machine Learning (0) | 2024.04.11 |