본문 바로가기
[R&D] 프로그래밍/Numpy

[Numpy] 넘파이란? 기본 개념 및 설치 방법

by Geuni 2022. 7. 10. 02:40
728x90
반응형

Numpy 란?

넘파이는 Numerical Python의 약자로 데이터 과학 전반에 사용되는 오픈 소스 Python 라이브러리입니다.

(공식 사이트 : https://numpy.org/)

 

NumPy

Powerful N-dimensional arrays Fast and versatile, the NumPy vectorization, indexing, and broadcasting concepts are the de-facto standards of array computing today. Numerical computing tools NumPy offers comprehensive mathematical functions, random number g

numpy.org

 

 다차원 배열(ndarray)과 행렬 연산을 효율적으로 처리할 수 있는 구조로 되어있습니다. 기본적인 연산부터, 선형대수학, 통계 연산 등에 대한 작업이 포함됩니다.

또한  Pandas, SciPy, Matplotlib 등과 함께 많이 사용되며, 파이썬에서 OpenCV 모듈을 사용할 때 필수로 설치되어야 합니다.

 

 인터프리터 언어인 파이썬은 기본적으로 느리다는 단점을 가지고 있지만 넘파이의 내부는 C언어로 구현되어 있어 동작 속도가 빠른게 장점입니다.


 넘파이는 import할 때 일반적으로 alias를 np로 사용합니다. 이는 넘파이를 사용하는 누구나 편하게 이해하고 사용할 수 있도록 관례처럼 되었습니다.

 

 또한 리스트와 비슷하게 인덱싱(indexing)이 가능합니다. 하지만 메모리가 각 배열의 요소마다 지정되는 반면 ndarray는 배열의 전체가 하나의 메모리에 잡히게 됩니다. 그래서 동적으로 확장 및 축소가 가능한 리스트와는 다르게 ndarray는 한번 생성된 객체의 크기를 변경하면 완전히 새로운 객체가 생성되고 원본이 삭제됩니다.

이런 구조는 연속적인 메모리 배치를 갖기 때문에 접근이 빨라 좋다고 생각하면 편합니다.

 

(아래는 이해를 돕기 위해 예시로 List와 Numpy의 객체 및 요소 별 메모리 주소를 찍어본 코드입니다.)

import numpy as np

a = [0, 1]
anp = np.array(a)
b = [5, 6]
a = a + b

print('[list]\ntype:{}\naddr:{}\n[0] addr:{}\n[1] addr:{}\n[2] addr:{}\n[3] addr:{}'
    .format(type(a), id(a), id(a[0]), id(a[1]), id(a[2]), id(a[3])))
print('[np]\ntype:{}\naddr:{}\n[0] addr:{}\n[1] addr:{}'
    .format(type(anp), id(anp), id(anp[0]), id(anp[1])))
# =============================
# [list]
# type:<class 'list'>
# addr:2062534335616
# [0] addr:2063725586704
# [1] addr:2063725586736
# [2] addr:2063725586864
# [3] addr:2063725586896
# =============================
# [numpy]
# type:<class 'numpy.ndarray'>
# addr:2063727492032
# [0] addr:2062531480176
# [1] addr:2062531480176
# =============================

 위 설명처럼 리스트는 요소 별 주소가 모두 다르고 메모리 위치도 연속적이지 못한걸 볼 수 있습니다.

하지만 넘파이는 하나의 주소를 가리키고 있습니다. 이해를 돕기위해 간단하게 도식화하면 아래와 같은 느낌입니다.

 


설치 방법

pip install numpy

 

728x90
반응형

댓글