본문 바로가기

데이터 다루기/Python

[Python] Numpy란?

728x90
반응형

Numpy는 Python에서 과학 컴퓨팅을 위한 기본적인 패키지입니다.

다차원 배열개체를, 다양한 파생 개체 (행렬), 수학적, 논리적, 모양 조작, 정렬, 선택을 포함하여 배열 단위로 빠른 작업을 제공해주는 Python 라이브러리입니다.

Numpy 패키지의 핵심은 배열 (ndarray)라고 할 수 있습니다.

Numpy 배열과 표준 Python에서의 시퀀스 사이에는 몇 가지 중요한 차이점이 있고, 이를 알아두면 Numpy의 매력에 빠지실 수 있습니다!!

Numpy 배열은 Python 목록과 달리 생성 시 크기가 고정되어 있습니다. 즉 ndarray의 크기를 변경하면 새 배열이 생성되고 원본은 삭제 됩니다.

Numpy 배열의 요소는 모두 동일한 데이터 유형이어야 하므로 메모리에서 동일한 크기가 됩니다. 

Numpy 배열은 많은 수의 데이터에 대한 고급 수학 및 기타 유형의 작업을 용이하게 합니다. 일반적으로 이러한 작업은 Python의 내장 시퀀스를 사용하는 것보다 더 효율적이고 적은 코드로 실행됩니다.

점점 더 많은 과학 및 수학 Pyhthon 기반 패키지가 Numpy 배열을 사용하고 있습니다. 이들은 일반적으로 Python 시퀀스 입력을 지원하지만 처리하기 전에 그러한 입력을 Numpy 배열로 변환합니다.

핵심적인 장점으로는 3번과 4번이라고 생각되네요~
이론적으로만 말고 예시로 알아보도록 할게요!

2개의 2차원 행렬 A와 B에 대해서 각각 element-wise 곱셈을 진행해보고 싶습니다.
Python sequence를 사용한다고 할 때, 2중 for문을 통해 구현 할 수 있습니다.

 

for i in range(len(A)):
   for j in range(len(A[0])):
      C[i][j] = A[i][j] * B[i][j]

 

반면에 Numpy ndarray는 단순하게 이를 구현할 수 있습니다.

 

C = A * B

 

단순히 곱하기 만으로 행렬을 element-wise 곱셈을 구현할 수 있다는 것이 Numpy의 장점 중 하나입니다.

과연 Numpy가 빠른 이유는 무엇일까요??

가장 큰 이유는 바로 "벡터화"이기 때문이라고 합니다.

벡터화는 코드에 명시적인 루핑, 인덱싱 등이 없음을 나타내고, 이러한 작업은 최적화되고 미리 컴파일된 C 기반 코드의 "뒤에서" 발생합니다. 이는 다양한 이점을 가지고 온다고 합니다.

1. 벡터화된 코드는 더 간결하고 읽기 쉽습니다.

2. 일반적으로 코드 줄이 적다는 것은 버그가 적다는 것을 의미합니다.

3. 코드는 표준 수학적 표기법과 더 유사합니다.

4. 벡터화는 더 많은 "Pythonic" 코드를 생성합니다. 벡터화가 없으면 우리의 코드는 비효율적이고 읽기 어려운 for 루프로 뒤덮일 것입니다.

반응형

'데이터 다루기 > Python' 카테고리의 다른 글

[Python] Array 정렬 (Sorting)  (0) 2023.03.16
[Python] Array 만들기  (0) 2023.03.16
[Python] 에러 및 디버깅  (0) 2023.02.15
[Python] 코드 실행 시간 측정  (0) 2023.02.15
[Python] 기초 문법 (9) List 관련 함수  (0) 2020.11.06