달력

112024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

1. NumPY ?

karma( 업 )/Python 2019. 5. 5. 09:11

NumPY는 벡터 행렬계산을 효율적으로 처리하기 위한 모듈로 Numeric 모듈과 Numarray 모듈이 합쳐져 높은 수준의 다차원 배열 계산을 고속 및 효율적으로 처리할 수 있다. 역시 pip 로 설치할 수 있다. pip로 opencv-python을 설치할 때 numpy는 자동으로 설치가 되는데 영상을 다룰때 numpy는 꼭 필요한 lib이기 때문이다.

하지만 NumPY만으로는 무언가를 할 수는 없다. NumPY는 데이타를 가공하는 도구일 뿐이기 때문이다. NumPY를 통해 1차적으로 가공된 다차원배열의 데이타( 영상같은 )를 가지고 opencv 같이 필요한 모듈에서 사용하는 것이다.

 

NumPY, Scipy, Matplotlib와 opencv-python에 대해 정리를 할 것이다.  따로 Python 문법에 대해서는 언급하지 않을 것이다. python 문법은 간단하기 때문에 필요 모듈을 공부하다 보면 자연스럽게 익혀지게 될 것이다.

아래 사이트는 Python의 자료형 및 NumPy 및 영상처리를 위한 Scipy와 Matplotlib에 대한 내용이 있다.

 

Python, Numpy, Scipy, Matplotlib Tutorial

 

Python Numpy Tutorial

이 튜토리얼은 Justin Johnson 에 의해 작성되었습니다. cs231n 수업의 모든 과제에서는 프로그래밍 언어로 파이썬을 사용할 것입니다. 파이썬은 그 자체만으로도 훌륭한 범용 프로그래밍 언어이지만, 몇몇 라이브러리(numpy, scipy, matplotlib)의 도움으로 계산과학 분야에서 강력한 개발 환경을 갖추게 됩니다. 많은 분들이 파이썬과 numpy를 경험 해보셨을 거라고 생각합니다. 경험하지 못했을지라도 이 문서를 통해 ‘프로그래밍 언어로

aikorea.org

 

 NumPY는  파이썬이 계산과학분야에 이용될때 핵심 역할을 하는 라이브러리이다.

 

1. NumPY?

2. 다차원 배열 생성하기

3. 메서드를 이용해서 최대, 최소, 평균, 표준편차 등 통계값 구하기

4. 인덱싱, 슬라이싱, 전치, 형태변경, 연결, 연산을 이용한 다차원 배열 현태 변경하기

5. 브로드캐스팅, 벡터화 연산 NumPY 고급기능

 

순서대로 공부를 진행할 예정이다.

 

첫 번째로 '1. NumPY 개요'에 대해서 공부를 해보자. 

 

NumPY는 거의 모든 Python lib 모듈을 사용하는데 있어 기본이 된다.

NumPy 존재이유

 

NumPY는 Pandas, Scikit-learn, Tensorflow등 데이터 사이언스 분야에서 사용되는 라이브러리들의 토대가 되는 라이브러리이다. NumPY 는 높은 수준의 데이터 분석 기능을 제공하지 않지만 NumPY를 활용해 Python상에서 표현하고 다룰 줄 알아야만 데이터 분석이라는 그 이후 단계로 나아갈 수 있다. NumPY만으로는 머신러닝을 할 수 없다. NumPY는 다차원 배열이라는 ndarray를 데이타로 나나태는 특화된 라이브러리이다. NumPY를 사용해서 데이타를 분석하거나 머신러닝 코드를 짜는게 목적이기 때문에 라이브러리로써 사용할 줄 알게 되면 된다. 다시 말해 NumPY는 다차원 배열을 나타내기 위한 라이브러리이다. 

Python에는 list라는 컨테이너가 있다. 이 list안에 list를 중첩시킴으로써 다차원 배열을 나타낼 수 있다. Python의 list와 NumPY는 무엇이 다를까? Python의 list에 접근하기 위해서는 for문을 사용하고 1차원에서 2차원으로 데이터의 차원이 증가하면 반복문도 중첩되게 사용하게 되어 데이터의 차원이 증가할수록 코드는 복잡해질 수밖에 없다. NumPY를 사용하면 다차원배열을 효율적으로 다룰 수 있고 C로 구현되어 있는 NumPY보다 Python의 list가 느리다. 

 

NumPY 사용 예

 

결과 값

 

NumPY 장점

  • 코어부분이 C로 구현되어 동일한 연산을 하더라도 Python에 비해 속도가 빠르다.
  • 라이브러리에 구현되어있는 함수들을 활용해 짧고 간결한 코드 작성이 가능하다.
  • 효율적인 메모리 사용이 가능하도록 구현되어 있다. 

 

NumPY는 다차원 배열을 내부에 구현되어 있는 메소들을 사용하여 편리하게 사용, 나타낼 수 있으며 빠르기 때문에 많이 사용된다. 

 

ndarray가 list보다 빠른 이유

ndarrary vs list 구조

 

그림에서 보면 Python list에는 데이터가 들어있지 않고 데이터를 가르키는 포인터, 주소값이 들어가 있다. NumPY이는 C 배열처럼 연속적으로 데이터가 그대로 입력되어 있어 구조상으로 차이가 난다. NumPY는 이 데이터를 C 반복문으로 순회하고 Python은 Python 반복문으로 순회하기 때문에 구조적으로 언어적으로 속도의 차이가 발생한다. 

 

Python list가 느린 이유

  • Python list는 결국 포인터의 배열
  • 경우에 따라 각각 객체가 메모리 여기저기 흩어져 있어 캐시 활용이 어렵다.

 

NumPY ndarray가 빠른 이유

  • ndarray는 타입을 명시하여 원소의 배열로 데이터를 유지
  • 다차원 데이터도 연속된 메모리 공간에 활당된다.
  • 많은 연산이 dimension과 strides를 잘 활용하면 효율적으로 가능

 

 

 

 

 

Posted by 생짜
|