본문 바로가기
  • Survival Plan
개발 이야기/Python

Python Numpy 추천 문서 및 유의점

by IT/머신러닝 엔지니어의 독서/경제/육아 공부 리치윈드 - windFlex 2020. 3. 9.

Python x Numpy 추천 문서



[참조 자료]

- Numpy 종합 : http://taewan.kim/post/numpy_cheat_sheet/

- Numpy 관련 튜터리얼 : http://cs231n.github.io/python-numpy-tutorial/

- Numpy의 Axis 관련 문서 : http://taewan.kim/post/numpy_sum_axis/

- Numpy Cheatsheet (DataCamp): https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf



python의 Array Like 개체는 여러가지가 있다. 대표적으로 Python 자체 문법에 해당하는 List / Tuple / Dictionary / Set 등이 있다. 여기에서는 자체 문법 중 List를 고려해 보자. 

 

또 다른 종류로써, Python의 추가 라이브러리의 Array 형태를 주로 사용한다. 대표적으로 Numpy의 Array 타입과, Pandas의 Series 및 DataFrame이 있다. 

 

그러데, Numpy 또는 Pandas를 사용하다 보면, 이런 Array 타입들이 때때로 매우 혼란 스러울 수 있다. 그래서, 독자는 한번은 시간을 내어서 이 들간의 관계를 명확히 정리해 두는 것이 좋을 것이다. 

 

예를 들면, List에서 “+”의 사용과, Numpy / Series에서의 “+” 연산의 사용은 전혀 다른 결과를 보인다. 

Python 자체 type인 List에서 “+”는 연결/결합을 의미하는 Concatenation 연산을 처리해 준다. 반면, Numpy / Series 등에서의 “+” 연산은 서로간의 매칭되는 원소의 숫자간 덧셈(사칙연산)을 처리한다. 

 

이러한 점이 Data Type에 따라 다른 결과를 보이기 때문에, 명확히 인지 하지 않을 경우, 중요한 에러를 발생시키기도 한다. 



Numpy 및 DataFrame/Series 를 다시 생각해 보면, 이러한 Data Type은 필요에 의하여 만들어진 것이다. 

Python의 List만 있을 경우를 생각해 보자. List 의 “+”는 배열의 추가를 의미하고, “*”는 배열을 복제/추가 연산을 처리한다. 

 

수학과 과학을 위해서 Python을 위해서, Vector 및 Matrix 연산을 수행해야 할 경우, 기본 Data Type인 List는 매우 불편하다. Vector 연산 ( Vector 간 사칙 연산 및 벡터곱 등)을 지원하지 않기 때문이다. 

 

필자의 경우 과거 순수 C언어를 생각하면, Vector 간 연산 및 Matrix(행렬) 연산을 수행하기 위하여, 매번 반복문(For 문 등)을 사용하여 2차원 배열 구조간 연산을 수행하였다. 

 

이는 Vector / Matrix 연산을 기본 연산으로 처리하는 Matlab 등을 고려할 때 매우 불편하지 않을 수 없다. 

 

따라서, Python 또한 Vector 연산을 지원하기 위한 라이브러리 들이 개발되었고 이 중 가장 일반화 된것이 Numpy이라고 볼 수 있다. 

 

이러한 내용을 염두에 두면, Python의 자체 List와 Numpy의 Array 연산 처리 방식이 직관적으로 쉽게 이해 될 수 있다. 

 

List는 숫자(Numeric)과 무관한 배열을 처리하므로, 당연하게 “+”는 추가/연결(Append / Concatenation)을 처리해야 한다. 

Numpy의 Array는 숫자/Vector의 연산을 가정으로 하기 때문에, “+” 등의 사칙연산은 당연하게도 Vector 연산을 처리하면, 

List으로 Vector 연산을 처리하지 못하는 경우를 가정하여, 특성(attribute)와 함수(Function)들을 포함하여 두었다. 

 

이렇게 Numpy를 개발하게된 배경을 이해하고, Numpy개발자 측면에서 바라보면, Numpy에서 처리되는 내용들이 당연하게 느껴지게 될 것이다. 

 

댓글0