AI

[딥러닝] Numpy Basic Concepts

EddyLee 2024. 4. 16. 14:50

딥러닝을 사용하면서 넘파이를 맨날 사용할텐데, 어떻게 사용하는지 알아보자.

(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열로 슬라이싱 한 결과가 나오게 된다.

 

array slicing - bigdata.dongguk.ac.kr