본문 바로가기
Python/Python 기초

NumPy 패키지 소개

by 찐남 2021. 8. 10.
Python을 이용해서 데이터 분석하기 위해서 필요한 패키지를 소개하고, 해당 패키지를 설치하는 방법에 대해서 알아보겠습니다. 본 포스팅은 Numpy 공식 페이지를 기반으로 작성하였습니다. 내용이 어렵다면, Python에서 수치 연산을 효율적으로 하기 위한 라이브러리 정도로 이해하고, 한번 읽어보신 후 넘어가도 좋습니다. 다만, 코드 실행을 위해 4. Numpy 설치하기는 꼭 숙지하시길 바랍니다. 

 

 



 

1. Numpy 

 

NumPy는 Python의 과학적인 컴퓨팅을 위한 기본 패키지입니다. Numpy는 다차원 배열 객체, 다양한 파생 객체(예: 마스크된 배열 및 행렬) 및 수학, 논리, 모양 조작, 정렬, 선택, I/O, 이산 푸리에 변환, 기본 선형 대수학, 기본 통계 연산, 무작위 시뮬레이션 등을 포함한 배열에 대한 빠른 작업을 위한 일련의 루틴을 제공하는 Python 라이브러리입니다. NumPy 패키지의 핵심은 ndarray 객체입니다. 이것은 성능을 위해 컴파일된 코드에서 수행되는 많은 작업과 함께 동종 데이터 유형의 n차원 배열을 캡슐화합니다. NumPy 배열과 표준 Python 시퀀스 간에는 몇 가지 중요한 차이점이 있습니다. 

 

  • NumPy 배열은 Python 목록(동적으로 커질 수 있음)과 달리 생성 시 고정된 크기를 갖습니다. ndarray의 크기를 변경하면 새 배열이 생성되고 원본이 삭제됩니다. 
  • NumPy 배열의 요소는 모두 동일한 데이터 유형이어야 하므로 메모리에서 동일한 크기가 됩니다. 다만, NumPy를 포함한 Python 객체의 배열을 가질 수 있으므로 다양한 크기의 요소 배열을 허용합니다. 
  • NumPy 배열은 많은 수의 데이터에 대한 고급 수학 및 기타 유형의 연산을 용이하게 합니다. 일반적으로 이러한 작업은 Python의 내장 시퀀스를 사용하여 적은 코드로 효율적인 실행이 가능합니다. 
  • NumPy 배열을 사용하는 과학 및 수학 Python 기반 패키지의 증가가 증가하고 있습니다. 이들은 일반적으로 Python 시퀀스 입력을 지원하지만 처리 전에 이러한 입력을 NumPy 배열로 변환하고 종종 NumPy 배열을 출력합니다. 다시 말해, 오늘날의 과학/수학 Python 기반 소프트웨어의 많은(아마도 대부분)을 효율적으로 사용하려면 Python의 내장 시퀀스 유형을 사용하는 방법을 아는 것만으로는 충분하지 않습니다. NumPy 배열을 사용하는 방법도 알아야 합니다. 

 

시퀀스 크기와 속도에 대한 요점은 과학 컴퓨팅에서 특히 중요합니다. 간단한 예로, 1차원 시퀀스의 각 요소를 동일한 길이의 다른 시퀀스에 있는 해당 요소와 곱하는 연산을 생각해 봅시다. 데이터가 두 개의 Python 목록(a와 b)에 저장되어 있으면 각 요소를 반복할 수 있습니다.

 

c = [ ]
for i in range(len(a)):
____c.append(a[i]*b[i])    # ____는 들여 쓰기 표현으로 실제 코딩 시 사용하지 않음

 

위와 같이 실행하면 정답이 나오지만, a와 b가 각각 수백만 개의 숫자를 포함한다면 우리는 파이썬에서 루핑(반복)의 비효율성에 대한 대가를 치르게 될 것입니다(계산 속도가 엄청 느려집니다). C에서 동일한 작업을 훨씬 더 빠르게 수행할 수 있습니다(명확성을 위해 변수 선언 및 초기화, 메모리 할당 등을 무시함).

 

for (i = 0; i < rows; i++): {
____c[i] = a[i]*b[i];
}

 

이렇게 하면 Python으로 코딩하여 얻을 수 있는 이점이 희생됩니다. 또한 필요한 코딩 작업은 데이터의 차원에 따라 증가합니다. 예를 들어 2차원 배열의 경우 C 코드(이전처럼 축약됨)는 다음과 같이 확장됩니다.

 

for (i = 0; i < rows; i++): {
____for (j = 0; j < columns; j++): {
________c[i][j] = a[i][j]*b[i][j];
____}
}

 

NumPy는 두 가지 장점을 모두 제공합니다. 요소별 작업은 ndarray가 포함될 때 "기본 모드"이지만 요소별 작업은 미리 컴파일된 C 코드에 의해 빠르게 실행됩니다. NumPy에서 c = a * b 의 코드로 이전 예제가 수행하는 작업을 C에 가까운 속도로 수행하지만 코드는 매우 단순해집니다. 실제로 NumPy 관용구는 훨씬 더 간단합니다. 이 마지막 예는 NumPy의 많은 기능의 기반이 되는 두 가지 NumPy 기능(벡터화 및 브로드캐스팅)을 보여줍니다.

 

 



 

 

2. NumPy가 빠른 이유

 

벡터화는 코드에 명시적 루핑, 인덱싱 등이 없다는 것을 설명합니다. 물론 이러한 작업은 최적화되고 미리 컴파일된 C 코드의 "뒤에서" 발생합니다. 벡터화된 코드에는 다음과 같은 많은 장점이 있습니다. 

 

  • 벡터화된 코드는 더 간결하고 읽기 쉽습니다.
  • 더 적은 코드 줄은 일반적으로 더 적은 버그를 의미합니다.
  • 코드는 표준 수학적 표기법과 더 유사합니다(일반적으로 수학적 구성을 올바르게 코딩하는 것이 더 쉽습니다).
  • 벡터화로 인해 더 많은 "Python" 코드가 생성됩니다. 벡터화가 없다면 우리 코드는 비효율적이고 읽기 어려운 for 문으로 가득 차게 될 것입니다. 

 

브로드캐스팅은 작업의 암시적 요소별 동작을 설명하는 데 사용되는 용어입니다. 일반적으로 NumPy에서는 산술 연산뿐만 아니라 논리적, 비트 단위, 기능적 등의 모든 연산이 이러한 암시적 요소별 방식으로 작동합니다. 즉, 브로드캐스트 합니다. 게다가 위의 예에서 (더 작은 배열이 더 큰 모양으로 브로드캐스트가 모호하지 않은 방식으로 "확장 가능"하다면) a와 b는 같은 모양의 다차원 배열, 스칼라와 배열, 또는 다른 모양의 두 배열일 수 있습니다. 

 

3. 기타 NumPy 사용자

 

NumPy는 다시 한 번 ndarray로 시작하는 객체 지향 접근 방식을 완벽하게 지원합니다. 예를 들어, ndarray는 수많은 메소드와 속성을 가진 클래스입니다. 많은 메서드가 가장 바깥쪽 NumPy 네임스페이스에 있는 함수에 의해 미러링 되므로 프로그래머가 선호하는 패러다임으로 코딩할 수 있습니다. 이러한 유연성 덕분에 NumPy 배열 방언과 NumPy ndarray 클래스가 Python에서 사용되는 다차원 데이터 교환의 사실상의 언어가 되었습니다. 

 

4. NumPy 설치하기

 

NumPy를 설치하려면 과학적 Python 배포판을 사용하는 것이 좋습니다. 운영 체제에 NumPy를 설치하기 위한 전체 지침을 찾고 있다면 여기에서 모든 세부 정보를 찾을 수 있습니다. 이미 Python이 설치되어 있는 경우 명령프롬프트 창을 실행하여 (윈도우 + R을 누르고, cmd 입력)  NumPy를 설치할 수 있습니다.

 

pip install numpy

 

 

NumPy 라이브러리가 잘 설치되었음을 확인할 수 있습니다.

 

 

 

반응형

'Python > Python 기초' 카테고리의 다른 글

다양한 문자열 출력 방법(%, format, f문자열)  (0) 2022.03.18
Pandas 패키지 소개  (0) 2021.08.11
파이참(PyCharm) 기본사용법  (0) 2021.08.09
파이참(PyCharm) 설치하기  (0) 2021.08.08
파이썬(Python) 설치하기  (0) 2021.08.07

댓글