NumPy
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
요
Num(Numerical Python의 약자)는 파이썬에서 과학 계산 및 수치 해석을 위한 핵심 라이브러리 중 하나로, 고성능의 다차원 배열 객체([ndarray](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B5%AC%EC%A1%B0/%EB%8B%A4%EC%B0%A8%EC%9B%90%EB%B0%B0%EC%97%B4/ndarray)
)와 이를 다루기 위한 다양한 수학적 함수들을 제공합니다. NumPy는 데이터 분석, 머신러닝, 물리 시뮬레이션, 이미지 처리 등 수치 계산이 필요한 거의 모든 분야에서 기반 도구로 사용되며, Pandas, SciPy, Matplotlib, scikit-learn 등의 주요 데이터 과학 라이브러리들이 내부적으로 NumPy 배열을 기반으로 동작합니다.
NumPy는 C로 작성된 저수준 연산을 백엔드에서 처리하여 파이썬의 느린 반복 연산을 대체함으로써 뛰어난 성능을 제공합니다. 또한, 벡터화된 연산(Vectorized Operations)을 통해 반복문 없이도 배열 전체에 대한 수학적 연산을 수행할 수 있어 코드가 간결하고 효율적입니다.
주요 기능 및 특징
1. ndarray
: 다차원 배열 객체
NumPy의 핵심은 numpy.ndarray
클래스입니다. 이 객체는 동일한 데이터 타입을 가진 요소들로 구성된 고정 크기의 다차원 배열이며, Python의 내장 리스트보다 훨씬 효율적인 메모리 사용과 연산 속도를 제공합니다.
import numpy as np
# 1차원 배열 생성
arr1 = np.array([1, 2, 3, 4])
print(arr1) # [1 2 3 4]
# 2차원 배열 생성
arr2 = np.array([[,2], [3, 4]])
print(arr2)
# [[1 2]
# [3 4]]
- 속성 예시:
arr.shape
: 배열의 형태 (예: (2, 3))arr.dtype
: 데이터 타입 (예: int64, float32)arr.size
: 전체 요소 수arr.ndim
: 차원 수
2. 벡터화 연산 (Vectorization)
NumPy는 반복문 없이도 배열 전체에 대한 연산을 수행할 수 있습니다. 이를 벡터화 연산이라고 하며, 성능과 가독성을 모두 향상시킵니다.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 요소별 덧셈 (자동으로 벡터화됨)
result = a + b
print(result) # [5 7 9]
3. 브로드캐스팅 (Broadcasting)
브로드캐스팅은 크기가 다른 배열 간의 연산을 가능하게 하는 NumPy의 강력한 기능입니다. 작은 배열이 자동으로 큰 배열에 맞춰 확장되어 연산이 수행됩니다.
arr = np.array([[1, 2], [3, 4]])
scalar = 10
result = arr + scalar
print(result)
# [[11 12]
# [13 14]]
4. 배열 생성 함수
NumPy는 다양한 방식으로 배열을 생성할 수 있는 함수를 제공합니다.
함수 | 설명 |
---|---|
[np.zeros](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.zeros)((2,3)) |
0으로 채워진 배열 생성 |
[np.ones](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.ones)((3,)) |
1로 채워진 1차원 배열 |
[np.arange](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.arange)(0, 10, 2) |
0부터 10미만까지 2씩 증가 (배열: [0, 2, 4, 6, 8]) |
[np.linspace](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.linspace)(0, 1, 5) |
0에서 1까지 균등 간격의5개 값 |
[np.random.rand](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%82%9C%EC%88%98%EC%83%9D%EC%84%B1/np.random.rand)(2,2) |
0~1 사이 난수 배열 생성 |
5. 인덱싱과 슬라이싱
NumPy 배열은 고급 인덱싱을 지원합니다. 정수 인덱스, 슬라이스, 불리언 마스크, 정수 배열 인덱싱 등을 사용할 수 있습니다.
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 슬라이싱
print(arr[0:2, 1:3]) # [[2 3], [5 6]]
# 불리언 마스킹
mask = arr > 5
print(arr[mask]) # [6 7 8 9]
성능 이점
NumPy는 C 확장을 기반으로 하여 Python의 느린 루프를 피하고, 메모리 지역성(locality)과 캐시 최적화를 활용합니다. 예를 들어, 100만 개의 숫자를 더하는 작업에서 NumPy는 순수 Python 리스트에 비해 수십 배에서 수백 배 빠른 성능을 보입니다.
import time
# Python 리스트
start = time.time()
sum([i for i in range(1000000)])
print("Python list sum:", time.time() - start)
# NumPy 배열
start = time.time()
np.sum(np.arange(1000000))
print("NumPy sum:", time.time() - start)
응용 분야
- 데이터 분석: Pandas의 내부 구현에 사용
- 머신러닝: 텐서 연산의 기초 (TensorFlow, PyTorch도 NumPy와 호환)
- 이미지 처리: 픽셀 데이터를 3D 배열로 표현
- 물리/공학 시뮬레이션: 미분 방정식, 선형 대수 계산
- 금융 모델링: 배열 기반의 통계 계산
참고 자료 및 관련 문서
- 공식 문서: https://numpy.org/doc/
- GitHub 저장소: https://github.com/numpy/numpy
- 관련 라이브러리:
- SciPy: 과학 계산 확장
- Pandas: 데이터 조작 및 분석
- Matplotlib: 시각화 (NumPy 배열 입력 지원)
NumPy는 파이썬 기반의 수치 계산 생태계의 기반이며, 데이터 과학 및 엔지니어링 분야에서 필수적인 도구입니다. 기본 배열 구조와 연산 방식을 익히면, 고급 라이브러리 사용에도 큰 도움이 됩니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.