맨위로가기

NumPy

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

NumPy는 파이썬 프로그래밍 언어를 위한 라이브러리로, 다차원 배열(ndarray)을 지원하며, 이러한 배열을 효율적으로 처리하기 위한 다양한 함수와 연산자를 제공한다. 1995년 matrix-sig라는 특별 관심 그룹에서 시작되어 Numeric, Numarray를 거쳐 2006년 NumPy 1.0으로 통합되었다. NumPy는 과학 및 공학 분야에서 널리 사용되며, MATLAB과 유사한 기능을 제공하며, OpenCV, SciPy, Matplotlib 등과 통합되어 다양한 응용 분야에서 활용된다.

더 읽어볼만한 페이지

  • 자유 수학 소프트웨어 - GNU 옥타브
    GNU 옥타브는 MATLAB과 높은 호환성을 가지며 수치 해석 계산을 위해 사용되는 자유-오픈 소스 소프트웨어이다.
  • 자유 수학 소프트웨어 - IPython
    IPython은 페르난도 페레스가 개발한 대화형 파이썬 셸 및 커널로, 자동 완성, 객체 검사, 셸 명령 기록 등의 기능을 제공하며 프로젝트 주피터로 분리되어 주피터를 위한 파이썬 셸과 커널로 유지되고 있다.
  • 수치 해석 소프트웨어 - LINPACK
    LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다.
  • 수치 해석 소프트웨어 - SAS (소프트웨어)
    SAS는 통계 분석, 데이터 마이닝, 예측 모델링 기능을 제공하는 소프트웨어 제품군으로, 농업 데이터 분석을 위해 개발되어 다양한 산업 분야에서 활용되고 있으며 인공지능 및 머신러닝 분야로 투자를 확대하고 있다.
  • 배열 프로그래밍 언어 - GNU 옥타브
    GNU 옥타브는 MATLAB과 높은 호환성을 가지며 수치 해석 계산을 위해 사용되는 자유-오픈 소스 소프트웨어이다.
  • 배열 프로그래밍 언어 - 줄리아 (프로그래밍 언어)
    줄리아는 2012년에 공개된 고수준 프로그래밍 언어로, 다중 디스패치, 동적 타입 시스템, C와 유사한 성능을 제공하며, 수치 계산, 과학 기술 계산 등에 활용된다.
NumPy - [IT 관련 정보]에 관한 문서
기본 정보
NumPy 로고
NumPy 로고
종류파이썬 라이브러리
장르수치 해석
개발자커뮤니티 프로젝트
최초 출시1995년 (Numeric), 2006년 (NumPy)
최신 안정화 버전1.23.0
최신 안정화 버전 출시일2022년 6월 22일
프로그래밍 언어파이썬, C
운영 체제크로스 플랫폼
라이선스수정 BSD 라이선스
웹사이트NumPy 공식 웹사이트
기술 정보
사용 분야과학 계산
데이터 분석
머신 러닝
특징다차원 배열 객체
배열 연산 및 수학 함수
C/C++ 코드 통합 도구
개발
주요 개발자트래비스 올리펀트
후원NumFOCUS

2. 역사

NumPy의 조상인 Numeric은 Jim Hugunin영어 등에 의해 개발되었다. 2005년, Travis Oliphant영어는 Numarray의 기능을 Numeric에 통합하고 대폭 수정하여 NumPy를 개발했다. NumPy는 오픈 소스 소프트웨어이며 다수의 개발자가 기여하고 있다.

NumPy는 Python 2.4부터 2.7 및 Python 3.1 이후 버전에서 사용할 수 있다. 2011년에는 PyPy용 NumPy API 개발도 시작되었다. 또한 NumPy를 Cython으로 작성하여 속도 향상을 꾀하고 있다.

2. 1. matrix-sig

1995년, 배열 컴퓨팅 패키지를 정의할 목적으로 특별 관심 그룹 (SIG) ''matrix-sig''가 설립되었다. 이 그룹에는 귀도 반 로섬이 있었으며, 그는 파이썬의 구문 (특히 인덱싱 구문[4])을 확장하여 배열 컴퓨팅을 더 쉽게 만들었다.[5]

2. 2. Numeric

짐 풀턴(Jim Fulton)은 행렬 패키지를 구현했고, 짐 휴거닌(Jim Hugunin)이 이를 일반화하여 ''Numeric''[5]을 개발했다. Numeric은 APL 계열 언어, Basis, MATLAB, FORTRAN, S 및 S+ 등의 영향을 받았다.[6][7]

매사추세츠 공과대학교(MIT) 대학원생이었던 휴거닌은[7] 1997년 전국 연구 이니셔티브 협회(CNRI)에 합류하여 JPython을 연구했으며,[5] 로렌스 리버모어 국립 연구소(LLNL)의 폴 듀보이스(Paul Dubois)가 유지 관리자가 되었다.[7] 초기 기여자로는 데이비드 아셔(David Ascher), 콘라드 힌슨(Konrad Hinsen), 트래비스 올리펀트 등이 있다.[7]

2. 3. Numarray

Numarray는 Numeric의 유연성을 개선하기 위해 개발되었으나, 현재는 사용이 중단되었다.[19][8][9] Numarray는 큰 배열에 대한 연산 속도가 빨랐지만, 작은 배열에서는 Numeric보다 느렸다.[10] 따라서 한동안 두 패키지가 서로 다른 사용 사례에 병행하여 사용되었다. Numeric의 마지막 버전(v24.2)은 2005년 11월 11일에, Numarray의 마지막 버전(v1.5.2)은 2006년 8월 24일에 출시되었다.[11]

2. 4. NumPy

2005년 초, NumPy 개발자 Travis Oliphant는 Numarray의 기능을 Numeric에 통합하고 개선하여, 2006년에 NumPy 1.0을 출시했다.[19] 이 프로젝트는 SciPy의 일부였으나, 배열 객체를 얻기 위해 대규모 SciPy 패키지를 설치해야 하는 문제를 피하고자 독립적인 패키지로 분리되었다. 2011년, NumPy 버전 1.5.0에서 파이썬 3에 대한 지원이 추가되었다.[13]

2011년, PyPy는 PyPy용 NumPy API 구현을 시작했으나,[14] 2023년 현재 완전히 호환되지는 않는다.[15]

3. 특징

NumPy는 CPython 참조 구현을 대상으로 하는 파이썬 라이브러리로, 다차원 배열과 배열 연산을 위한 함수를 제공하여 속도 문제를 해결한다. 이는 컴파일된 코드보다 느리게 실행되는 수학 알고리즘의 속도 저하를 개선하기 위함이다.[16]

NumPy는 MATLAB과 유사하게 인터프리터 방식으로 작동하며, 배열 및 행렬 연산을 통해 빠른 프로그램 작성을 지원한다. MATLAB이 다양한 툴박스를 제공하는 반면, NumPy는 더 범용적인 프로그래밍 언어인 Python과 통합되어 있으며, SciPy, Matplotlib 등 보완적인 패키지를 활용할 수 있다. 예를 들어, SciPy는 MATLAB과 유사한 기능을 추가하고, Matplotlib은 플로팅 기능을 제공한다. MATLAB은 희소 행렬 연산을 지원하지만, NumPy 자체는 지원하지 않으며 SciPy의 sparse 라이브러리를 사용해야 한다. 내부적으로 NumPy와 MATLAB은 모두 BLAS와 LAPACK을 사용하여 효율적인 선형 대수 계산을 수행한다.[16]

또한, 널리 사용되는 컴퓨터 비전 라이브러리인 OpenCV와의 통합도 지원한다. OpenCV의 Python 바인딩은 NumPy 배열을 사용하여 데이터를 저장하고 조작한다. 이미지는 다차원 배열로 표현되므로, 인덱싱, 슬라이싱, 마스킹과 같은 NumPy 기능을 통해 이미지 픽셀에 효율적으로 접근할 수 있다. 이는 프로그래밍 워크플로우와 디버깅을 간소화하는 데 기여한다.

NumPy 연산은 전역 인터프리터 잠금을 해제하여 멀티스레드 처리가 가능하다는 장점이 있다.[17] 또한, C API를 제공하여 외부 라이브러리와 상호 작용할 수 있도록 한다.[18]

NumPy는 파이썬의 동적 타입 특성으로 인한 수치 계산 속도 저하 문제를 해결하기 위해 타입이 지정된 다차원 배열 객체(numpy.ndarray)와 관련 함수를 제공한다. 내부는 C 언어(및 포트란)로 구현되어 빠른 속도를 제공하며, 벡터화를 통해 계산 시간의 대부분을 C 언어 네이티브 코드로 실행하여 속도를 향상시킨다. 또한, BLAS API를 구현한 행렬 연산 라이브러리(OpenBLAS, ATLAS, 인텔 수학 커널 라이브러리 등)를 사용하여 선형 대수 연산을 더욱 빠르게 수행할 수 있다.[27]

NumPy는 MATLAB의 자유로운 대체재로 사용될 수 있다. 두 도구 모두 동적 프로그래밍 언어로서 유연성을 가지며, 배열 및 행렬 연산을 통한 고속 연산을 지원한다. MATLAB은 상용 소프트웨어로 다양한 내장 함수와 툴박스를 제공하는 반면, NumPy는 오픈 소스이며 무료로 제공되는 Python에 통합되어 다양한 보조 라이브러리(SciPy, Matplotlib 등)와 함께 사용될 수 있다. NumPy와 MATLAB은 모두 LAPACK API를 통해 행렬 연산을 수행한다.

3. 1. ndarray 자료 구조

NumPy의 핵심 기능은 ''n''차원 배열(ndarray) 자료 구조이다.[19] ndarray는 균일하게 유형화된 데이터를 메모리에 저장하며, 스트라이드 뷰를 제공한다.[19] C/C++, 파이썬, 포트란 확장으로 할당된 메모리 버퍼에 대한 뷰를 생성할 수 있어, 기존 수치 라이브러리와의 호환성을 제공한다. 이는 SciPy 패키지에서 활용되며, 특히 BLAS 및 LAPACK 라이브러리를 래핑한다. NumPy는 메모리 맵 ndarray에 대한 내장 지원을 제공한다.[19]

3. 2. 한계

NumPy에서 배열에 항목을 삽입하거나 추가하는 것은 파이썬 리스트만큼 간단하지 않다. 배열을 확장하는 `np.pad(...)` 루틴은 실제로 새 배열을 생성하고, 기존 배열을 복사하여 반환한다. NumPy의 `np.concatenate([a1, a2])` 연산은 두 배열을 연결하는 것이 아니라, 새로운 배열을 반환한다. `np.reshape(...)`를 사용하여 배열의 차원을 변경하는 것은 요소 수가 변경되지 않는 경우에만 가능하다. 이러한 상황은 NumPy 배열이 연속적인 데이터 버퍼에 대한 뷰여야 하기 때문에 발생한다.

벡터화된 연산으로 표현할 수 없는 알고리즘은 "순수 파이썬"으로 구현해야 하므로 느리게 실행될 수 있다. 벡터화는 일부 연산의 공간 복잡도를 상수에서 선형으로 증가시킬 수 있다. 이러한 문제를 피하기 위해 numexpr[20], Numba[21], Cython, Pythran과 같은 오픈 소스 솔루션이 개발되었다.

많은 현대적인 빅 데이터 과학 컴퓨팅 응용 프로그램은 NumPy 배열의 기능을 초과하는 요구 사항을 가지고 있다. 예를 들어, NumPy 배열은 일반적으로 컴퓨터의 휘발성 메모리에 로드되는데, 이는 대규모 데이터 세트 분석에 충분한 용량을 갖지 못할 수 있다. 또한 NumPy 연산은 단일 중앙 처리 장치에서 실행된다. 많은 선형 대수 연산은 컴퓨터 클러스터의 CPU 또는 그래픽 처리 장치 (GPU) 및 텐서 처리 장치 (TPU)와 같은 특수 하드웨어에서 실행하여 가속화할 수 있으며, 많은 딥 러닝 응용 프로그램이 이에 의존한다. 결과적으로, Dask, TensorFlow, [https://jax.readthedocs.io JAX]와 같은 대체 배열 구현이 등장했다. Nvidia의 CUDA 프레임워크로 가속화된 CuPy[22] 라이브러리도 NumPy의 '드롭인 대체'로서 더 빠른 컴퓨팅 가능성을 보여주었다.[23]

파이썬은 동적 타입 언어이므로 유연하지만, 순수 파이썬만으로는 수치 계산 속도가 느리다. NumPy는 C 언어(및 포트란)로 구현된 다차원 배열 객체(numpy.ndarray)와 연산 함수를 제공하여 이 문제를 해결한다. NumPy는 BLAS API를 구현한 행렬 연산 라이브러리(OpenBLAS, ATLAS, 인텔 수학 커널 라이브러리 등)를 사용하여 선형 대수 연산을 빠르게 수행한다.[27]

일반적으로 행렬 연산에서는 메모리 대역폭이 병목 현상이 된다. NumPy API 구조상 불필요한 메모리 읽기/쓰기가 빈번하게 발생한다. 이 문제를 해결하기 위해 Numexpr이 개발되었다.[28]

NumPy는 고정된 shape를 가진 다차원 배열 계산에 특화되어 있으며, 요소의 길이가 서로 다른 불규칙 배열(ragged array|래기드 배열영어)[29][30]은 기본적으로 지원하지 않는다.[31]

4. 응용

NumPy는 다음과 같은 다양한 분야에 응용된다.


  • 기본 연산: 배열에 대한 사칙연산 및 거듭제곱과 같은 기본 연산을 쉽게 수행할 수 있다.
  • 유니버설 함수: 사인, 코사인 등 다양한 유니버설 함수를 제공하며, 숫자와 배열 모두 매개변수로 사용할 수 있다.[27]
  • 선형 대수: 행렬 전치, 역행렬 계산, 방정식 해, 행렬 곱셈 등 선형 대수학 연산을 지원한다.
  • 다차원 배열: 다차원 배열을 생성하고, 축을 변경하는 기능을 제공한다.
  • OpenCV와의 통합: 컴퓨터 비전 라이브러리인 OpenCV의 Python 언어 바인딩은 NumPy 배열을 사용하여 이미지 데이터를 저장하고 조작한다.
  • 최근접 이웃 탐색: 최근접 이웃 탐색 알고리즘을 효율적으로 구현할 수 있다.
  • F2PY: F2PY를 통해 포트란 코드를 파이썬에서 호출할 수 있게 해준다.[24][25][26]
  • 불규칙 배열: 고정된 shape를 가진 다차원 배열을 높은 효율로 계산하는 데 특화되어 있으며, 불규칙 배열(ragged array|래기드 어레이영어)[29][30]은 기본적으로 지원하지 않는다.[31]

4. 1. 기본 연산

NumPy를 사용하면 배열에 대한 사칙연산 및 거듭제곱과 같은 기본 연산을 쉽게 수행할 수 있다.

```numpy

>>> a = np.array([1, 2, 3, 6])

>>> b = np.linspace(0, 2, 4) # 0부터 2까지 동일 간격으로 4개의 점을 생성한다.

>>> c = a - b

>>> c

array([ 1. , 1.33333333, 1.66666667, 4. ])

>>> a**2

array([ 1, 4, 9, 36])

```

위 코드에서 `a`와 `b`는 NumPy 배열이고, `-` 연산자는 두 배열의 각 요소끼리 뺄셈을 수행한다. `**` 연산자는 각 요소를 거듭제곱한다. 이처럼 NumPy는 배열 간 연산을 간결하게 표현할 수 있도록 해준다.

4. 2. 유니버설 함수

NumPy는 사인, 코사인 등 다양한 유니버설 함수를 제공한다. 유니버설 함수는 숫자와 배열 모두 매개변수로 사용할 수 있다.[27]

```python

>>> np.sin(1)

0.8414709848078965

>>> np.sin(np.array([1, 2, 3]))

array([0.84147098, 0.90929743, 0.14112001])

4. 3. 선형 대수

NumPy는 행렬 전치, 역행렬 계산, 방정식 해, 행렬 곱셈 등 선형 대수학 연산을 지원한다. 이러한 기능은 C 언어(및 포트란)로 구현되어 있어 매우 빠르게 작동하며, BLAS API를 구현한 행렬 연산 라이브러리 (OpenBLAS, ATLAS, 인텔 수학 커널 라이브러리 등)를 사용하여 더욱 빠른 연산 속도를 제공한다.[27]

NumPy를 사용한 선형 대수 연산 예시는 다음과 같다.



>>> from numpy.random import rand

>>> from numpy.linalg import solve, inv

>>> a = np.array(1, 2, 3], [3, 4, 6.7], [5, 9.0, 5)

>>> a.transpose()

array(

[ 2. , 4. , 9. ],

[ 3. , 6.7, 5. ]])

>>> inv(a)

array(

[ 1.04519774, -0.56497175, 0.1299435 ],

[ 0.39548023, 0.05649718, -0.11299435]])

>>> b = np.array([3, 2, 1])

>>> solve(a, b) # solve the equation ax = b

array([-4.83050847, 2.13559322, 1.18644068])

>>> c = rand(3, 3) * 20 # create a 3x3 random matrix of values within [0,1] scaled by 20

>>> c

array(

[ 9.24410671, 5.5240412 , 10.6468792 ],

[ 10.38136661, 8.44968437, 15.17639591]])

>>> np.dot(a, c) # matrix multiplication

array(

[ 118.4935668 , 86.14012835, 158.40440712],

[ 155.04043289, 104.3499231 , 195.26228855]])

>>> a @ c # Starting with Python 3.5 and NumPy 1.10

array(

[ 118.4935668 , 86.14012835, 158.40440712],

[ 155.04043289, 104.3499231 , 195.26228855]])



위 코드에서 `a.transpose()`는 행렬 `a`의 전치 행렬을, `inv(a)`는 `a`의 역행렬을 계산한다. `solve(a, b)`는 방정식 `ax = b`의 해를 구하며, `np.dot(a, c)` 또는 `a @ c`는 행렬 `a`와 `c`의 곱셈을 수행한다.

4. 4. 다차원 배열

NumPy는 다차원 배열을 생성하고, 축을 변경하는 기능을 제공한다.

```python

>>> M = np.zeros(shape=(2, 3, 5, 7, 11))

>>> T = np.transpose(M, (4, 2, 1, 3, 0))

>>> T.shape

(11, 5, 3, 7, 2)

```

파이썬은 동적 타입 언어이므로 유연한 프로그래밍이 가능하지만, 순수 파이썬만으로 수치 계산을 하면 C 언어나 자바 같은 정적 타입 언어에 비해 계산 시간이 오래 걸린다. NumPy는 타입이 지정된 다차원 배열 객체(numpy.ndarray)와 배열 연산 함수를 제공하여 이 문제를 해결한다. NumPy 내부는 C 언어(및 포트란)로 구현되어 빠르게 작동한다. 큰 다차원 배열 연산(벡터화)은 C 언어 네이티브 코드로 실행되어 속도가 향상된다. NumPy는 BLAS API 구현 행렬 연산 라이브러리(OpenBLAS, ATLAS, 인텔 수학 커널 라이브러리 등)를 사용하여 선형 대수 연산을 빠르게 수행한다[27].

일반적으로 행렬 연산은 메모리 대역폭이 병목 현상을 일으킨다. NumPy API 구조상 여러 연산이 연속될 때 불필요한 메모리 읽기/쓰기가 빈번하다. 이를 해결하기 위해 NumPy 기반의 Numexpr이 개발되었다[28].

4. 5. OpenCV와의 통합

널리 사용되는 컴퓨터 비전 라이브러리인 OpenCV의 Python 언어 바인딩은 NumPy 배열을 사용하여 이미지 데이터를 저장하고 조작한다. 여러 채널이 있는 이미지는 단순히 3차원 배열로 표현되므로, 배열 인덱싱, 슬라이싱, 마스킹과 같은 방법을 통해 이미지의 특정 픽셀에 효율적으로 접근할 수 있다. OpenCV에서 이미지는 보편적인 데이터 구조인 NumPy 배열로 표현되며, 추출된 특징점, 필터 커널 등도 NumPy 배열로 표현되어 프로그래밍 및 디버깅 과정을 간소화한다.[16]

```python

import numpy as np

import cv2

r = np.reshape(np.arange(256*256)%256,(256,256)) # 빨간색 채널에 대해 0에서 255까지 수평 그라데이션을 갖는 256x256 픽셀 배열

g = np.zeros_like(r) # r과 크기와 유형은 같지만 녹색 채널에 대해 0으로 채워진 배열

b = r.T # 전치된 r은 파란색 채널에 대한 수직 그라데이션을 제공

cv2.imwrite('gradients.png', np.dstack([b,g,r])) # OpenCV 이미지는 BGR로 해석되며, 깊이 쌓인 배열은 'gradients.png'라는 8비트 RGB PNG 파일로 기록됨.

4. 6. 최근접 이웃 탐색

NumPy를 사용하면 최근접 이웃 탐색 알고리즘을 효율적으로 구현할 수 있다. 순수 파이썬으로 작성된 반복적인 알고리즘과 NumPy를 사용한 벡터화된 버전은 다음과 같다.[8]

```python

# # # 순수한 반복 파이썬 # # #

points = 9,2,8],[4,7,2],[3,4,4],[5,6,9],[5,0,7],[8,2,7],[0,3,2],[7,3,0],[6,1,1],[2,9,6

qPoint = [4,5,3]

minIdx = -1

minDist = -1

for idx, point in enumerate(points): # 모든 점에 대해 반복

dist = sum([(dp-dq)2 for dp,dq in zip(point,qPoint)])0.5 # 각 점과 q 사이의 유클리드 거리를 계산

if dist < minDist or minDist < 0: # 필요한 경우 최소 거리와 해당 점의 인덱스 업데이트

minDist = dist

minIdx = idx

print(f'q에 가장 가까운 점: {points[minIdx]}')

# q에 가장 가까운 점: [3, 4, 4]

# # # 동등한 NumPy 벡터화 # # #

import numpy as np

points = np.array(9,2,8],[4,7,2],[3,4,4],[5,6,9],[5,0,7],[8,2,7],[0,3,2],[7,3,0],[6,1,1],[2,9,6)

qPoint = np.array([4,5,3])

minIdx = np.argmin(np.linalg.norm(points-qPoint,axis=1)) # 한 번에 모든 유클리드 거리를 계산하고 가장 작은 값의 인덱스를 반환

print(f'q에 가장 가까운 점: {points[minIdx]}')

# q에 가장 가까운 점: [3 4 4]

4. 7. F2PY

NumPy는 F2PY를 통해 포트란 코드를 파이썬에서 호출할 수 있게 해준다.[24][25][26]

다음은 F2PY를 사용하여 포트란 서브루틴을 파이썬에서 호출하는 예시이다.

'''Fortran 코드'''

```fortran

! Python Fortran 네이티브 코드 호출 예시

! f2py -c -m foo *.f90

! intent 구문을 사용하여 Fortran을 Python 명명 모듈로 컴파일합니다.

! Fortran 서브루틴만 해당되며, 함수는 C 래퍼를 사용한 JNI보다 쉽습니다.

! gfortran 및 make가 필요합니다.

subroutine ftest(a, b, n, c, d)

implicit none

integer, intent(in) :: a, b, n

integer, intent(out) :: c, d

integer :: i

c = 0

do i = 1, n

c = a + b + c

end do

d = (c * n) * (-1)

end subroutine ftest

```

'''Python 코드'''

```pycon

>>> import numpy as np

>>> import foo

>>> a = foo.ftest(1, 2, 3) # 또는 a.c 및 a.d 대신 c,d =

>>> print(a)

(9,-27)

>>> help('foo.ftest') # foo.ftest.__doc__

4. 8. 불규칙 배열

NumPy는 고정된 shape를 가진 다차원 배열을 높은 효율로 계산하는 데 특화된 라이브러리이며, 불규칙 배열(ragged array|래기드 어레이영어)[29][30]은 기본적으로 지원하지 않는다.[31] `object`형 배열을 명시적으로 생성하여 불규칙 배열을 조작하는 것은 가능하지만(자동 추론은 권장되지 않음[32]), 이는 포인터 배열일 뿐이며 메모리 레이아웃 등 NumPy의 기능은 지원되지 않는다.

5. 기타

NumPy는 ATLAS, 인텔 수학 커널 라이브러리 등 BLAS API를 구현한 행렬 연산 라이브러리를 사용하여 선형 대수 연산을 빠르게 수행한다.[27] 이는 C 언어로 작성된 코드보다 빠를 수 있다.

행렬 연산에서는 메모리 대역폭이 병목 현상이 되는 경우가 많다. NumPy API 구조상 여러 연산이 이어지면 불필요한 메모리 읽기/쓰기가 자주 발생하는데, 이 문제를 해결하기 위해 Numexpr이 개발되었다.[28]

5. 1. MATLAB과의 비교

Python과 NumPy를 함께 사용하면 MATLAB과 비슷한 기능을 쓸 수 있고, MATLAB을 자유롭게 대체할 수 있다.[16] NumPy는 오픈 소스이며 무료이고, 여러 분야에 쓸 수 있는 Python에 통합되어 있다는 장점이 있다.

MATLAB은 특히 Simulink를 포함한 많은 추가 툴박스를 가지고 있지만, NumPy는 더 현대적이고 완전한 프로그래밍 언어인 Python과 기본적으로 통합되어 있다.[16] 또한, SciPy처럼 MATLAB과 비슷한 기능을 추가하는 라이브러리나, Matplotlib처럼 MATLAB과 유사한 플로팅 기능을 제공하는 플로팅 패키지 같은 보완적인 Python 패키지를 사용할 수 있다.[16] MATLAB은 희소 행렬 연산을 할 수 있지만, NumPy만으로는 이러한 연산을 할 수 없고 scipy.sparse 라이브러리를 사용해야 한다. 내부적으로 MATLAB과 NumPy는 모두 효율적인 선형 대수 계산을 위해 BLAS와 LAPACK에 의존한다.[16]

5. 2. 학습 자료


  • 요시다 타쿠마, 오바라 하야토, 《현장에서 활용하는! NumPy 데이터 처리 입문 제2판: 머신 러닝·데이터 과학에 도움이 되는 고속 처리 기법》, 쇼에이샤, ISBN 978-4-79818642-9 (2024년 8월 26일).

참조

[1] 웹사이트 NumPy — NumPy https://numpy.org/ NumPy developers
[2] Q Q99413970
[3] 웹사이트 NumFOCUS Sponsored Projects https://numfocus.org[...] NumFOCUS 2021-10-25
[4] 웹사이트 Indexing — NumPy v1.20 Manual https://numpy.org/do[...] 2021-04-06
[5] 간행물 Python for Scientists and Engineers http://www.computer.[...] 2014-07-07
[6] 간행물 Python for Scientific Computing http://www.vision.im[...] 2013-10-12
[7] 웹사이트 Numerical Python http://www.cs.mcgill[...]
[8] 웹사이트 Numarray Homepage http://www.stsci.edu[...] 2006-06-24
[9] 서적 Guide to NumPy https://archive.org/[...] 2006-12-07
[10] 웹사이트 '[Numpy-discussion] Status of Numeric' https://mail.scipy.o[...] 2017-02-02
[11] 웹사이트 NumPy Sourceforge Files http://sourceforge.n[...] 2008-03-24
[12] 웹사이트 History_of_SciPy - SciPy wiki dump https://scipy.github[...]
[13] 웹사이트 NumPy 1.5.0 Release Notes http://sourceforge.n[...] 2011-04-29
[14] 웹사이트 PyPy Status Blog: NumPy funding and status update http://morepypy.blog[...] 2011-12-22
[15] 웹사이트 NumPyPy Status http://buildbot.pypy[...] 2023-12-19
[16] 웹사이트 NumPy for Matlab users https://docs.scipy.o[...] 2017-02-02
[17] 웹사이트 numpy release notes https://numpy.org/de[...]
[18] 서적 Python for Data Analysis O'Reilly 2014
[19] 간행물 The NumPy array: a structure for efficient numerical computation IEEE
[20] 웹사이트 numexpr https://github.com/p[...] 2014-03-08
[21] 웹사이트 Numba http://numba.pydata.[...] 2014-03-08
[22] Citation Shohei Hido - CuPy: A NumPy-compatible Library for GPU - PyCon 2018 https://www.youtube.[...] 2021-05-11
[23] 웹사이트 Single-GPU CuPy Speedups https://medium.com/r[...] 2021-05-11
[24] 웹사이트 F2PY docs from NumPy https://numpy.org/do[...] NumPy 2022-04-18
[25] 웹사이트 A python vs. Fortran smackdown https://guyworthey.n[...] Guy Worthey 2022-04-18
[26] 웹사이트 Writing fast Fortran routines for Python https://sites.engine[...] University of California, Santa Barbara 2022-04-18
[27] 웹사이트 SciPy PerformancePython http://scipy.org/Per[...] 2009-09-28
[28] Github pydata/numexpr https://github.com/p[...]
[29] Numpy NEP 34 — Disallow inferring dtype=object from sequences https://numpy.org/ne[...]
[30] Tensorflow Ragged tensors https://www.tensorfl[...]
[31] h5py Special types https://docs.h5py.or[...]
[32] Numpy NEP 34 — Disallow inferring dtype=object from sequences https://numpy.org/ne[...]
[33] 웹사이트 JAX: Autograd and XLA https://github.com/g[...] 2020-11-19
[34] 웹인용 Numpy News https://numpy.org/ne[...] 2022-09-07



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com