본문 바로가기
Study/Deep Learning

A Note on Python/Numpy Vectors

by 강렬한 스포트라이트 2024. 3. 26.

 

 

파이썬의 브로드 캐스팅,

더 일반적으로 말해서 NumPy를 사용한 파이썬 프로그래밍의 유연성은

프로그래밍 언어의 장점과 단점 모두 될 수 있다고 생각한다.

 

장점으로 언어의 넓은 표현성과 유연성은 한 줄의 코드로도 많은 걸 할 수 있게 해주고,

단점으로 브로드 캐스팅의 유연성은 자세한 내용과 작동 방법을 모른다면 이상하고 찾기 힘든 오류가 생긴다.

 

예를 들어, 행 벡터와 열 벡터를 더한다면 차원 오류나 형 오류가 생길 거라고 생각하겠지만,

두 벡터의 합인 행렬이 나올 수도 있다. 이 결과는 파이썬 내부 논리로 처리되지만,

파이썬에 익숙하지 않다면 이상하고 찾기 어려운 오류들이 생긴다.

 

해당 강의에서 확인하고자 하는 것은

코드를 간단하게 하거나, 이상한 오류들을 없애줬던 NumPy를 써보려고 한다.

 


 

a.shape이 5가 되는 이상한 자료구조를 만들었다. a.shape = (5,)

이를 rank 1 array 라고 한다. 행 벡터나 열 벡터 둘 다 아닌, 이상한 자료 구조이다. (결과가 직관적이지 않다.)

a = np.random.randn(5)

 

 

프로그래밍 예제나 신경망에서 로지스틱 회귀를 구현할 때, 랭크 1 배열은 아예 사용하지 않는 것이다.

대신, 항상 배열을 만들 때 아래와 같이 만든다면 벡터의 동작을 더 쉽게 이해할 수 있을 것이다.

벡터가 필요할 때는 아래의 둘 중 하나를 사용하고, rank 1 array는 사용하지 않는다.

 

-> 만약, rank 1 array을 얻게 된다면, reshape 함수를 사용해서

(5,1), (1,5)로 바꾸어 일관되게 열 벡터나 행 벡터로 동작할 수 있다.

a = np.random.randn(5,1)
a = np.random.randn(1,5)

#1번: a.shape은 (5,1)이 되고, 이는 열 벡터가 되고 열 벡터처럼 동작한다.
#따라서, (5,1) 행렬이나 열 벡터라고 생각할 수 있다.
#2번: a.shape은 (1,5)가 되고, 행 벡터처럼 반응한다.

 

 

코드에서 벡터의 차원을 확실히 알지 못할 때, assert 함수를 사용한다.

assert(a.shape == (5,1))

 

 


 

1) rank 1 array 를 사용하지 않고, 코드를 간단히 할 수 있다.

이는 열 벡터인 (n,1) 행렬 혹은 행 벡터인 (1,n) 행렬을 사용하는 것이다.

 

2) assert 함수를 많이 사용해서 행렬과 배열의 차원을 확인할 수 있다.

 

3) 행렬과 벡터를 필요한 차원으로 만들기 위해, reshape 함수를 사용할 수 있다.

 

 

 

 

* 아래의 영상을 참고하여 정리한 내용입니다.

https://www.youtube.com/watch?v=V2QlTmh6P2Y&list=PLkDaE6sCZn6Ec-XTbcX1uRg2_u4xOEky0&index=22

 

반응형
SMALL

'Study > Deep Learning' 카테고리의 다른 글

Broadcasting in Python  (0) 2024.03.26
Vectorizing Logistic Regression's Gradient Computation  (0) 2024.03.26
Vectorizing Logistic Regression  (0) 2024.03.25
More Vectorization Examples  (0) 2024.03.25
Vectorization  (0) 2024.03.25