NumPy
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.
NumPy
개요
NumPy(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%20%EB%B0%B0%EC%97%B4/ndarray)
)와 이를 효율적으로 처리할 수 있는 함수들을 제공합니다. NumPy는 데이터 분석, 기계 학습, 수치 시뮬레이션, 이미지 처리 등 다양한 분야에서 기반이 되는 도구로 널리 사용되며, Pandas, SciPy, Matplotlib, scikit-learn 등의 주요 데이터 과학 라이브러리들이 내부적으로 NumPy 배열을 기반으로 동작합니다.
NumPy는 C와 포트란으로 작성된 저수준 라이브러리(Fortran BLAS 및 LAPACK 등) 위에 구축되어 있어, 순수 파이썬보다 훨씬 빠른 계산 성능을 제공합니다. 특히 벡터화 연산(vectorized operations)을 통해 반복문 없이 배열 전체에 대한 수학적 연산을 수행할 수 있어 코드의 간결성과 실행 속도 모두를 향상시킵니다.
주요 기능
1. ndarray
: 다차원 배열 객체
NumPy의 핵심은 numpy.ndarray
클래스로, 고정된 크기의 동일한 데이터 타입을 가지는 다차원 배열을 표현합니다. 이 배열은 메모리 상에 연속적으로 저장되어 접근 속도가 매우 빠릅니다.
import numpy as np
# 1차원 배열 생성
arr1 = np.array([1, 2, 3, 4])
print(arr1) # [1 2 3 4]
# 2차원 배열 생성
arr2 = np.array([[1, 2], [3, 4]])
print(arr2)
# [[1 2]
# [3 4]]
ndarray
는 다음과 같은 속성을 가집니다:
- shape
: 배열의 차원 크기 (예: (3, 4)
)
- dtype
: 배열 요소의 데이터 타입 (예: int64
, float32
)
- size
: 전체 요소의 개수
- ndim
: 차원 수 (랭크)
2. 배열 생성 함수
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%20%EC%83%9D%EC%84%B1/np.zeros)(shape) |
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%20%EC%83%9D%EC%84%B1/np.ones)(shape) |
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%20%EC%83%9D%EC%84%B1/np.arange)(start, stop, step) |
지정된 범위의 숫자 배열 생성 (range와 유사) |
[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%20%EC%83%9D%EC%84%B1/np.linspace)(start, stop, num) |
균등 간격의 숫자 배열 생성 |
[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%B0%B0%EC%97%B4%20%EC%83%9D%EC%84%B1/np.random.rand)(shape) |
난수로 채워진 배열 생성 |
zeros = np.zeros((2, 3)) # 2x3 배열, 모두 0
ones = np.ones((2, 2)) # 2x2 배열, 모두 1
seq = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
linspace = np.linspace(0, 1, 5) # [0.0, 0.25, 0.5, 0.75, 1.0]
3. 벡터화 연산 (Vectorization)
NumPy는 배열 전체에 대해 원소 단위로 연산을 수행할 수 있습니다. 이를 통해 for
루프를 사용하지 않고도 수학적 연산을 빠르게 처리할 수 있습니다.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 벡터화 덧셈
c = a + b # [5, 7, 9]
# 스칼라 연산
d = a * 2 # [2, 4, 6]
# 수학 함수 적용
e = np.sin(a) # [sin(1), sin(2), sin(3)]
4. 브로드캐스팅 (Broadcasting)
브로드캐스팅은 서로 다른 크기의 배열 간에 연산을 수행할 수 있게 해주는 강력한 기능입니다. 작은 배열이 자동으로 큰 배열의 형태에 맞게 확장됩니다.
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
result = a + b # b가 [[10, 20], [10, 20]]로 확장됨
# 결과: [[11, 22], [13, 24]]
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]
고급 기능
1. 선형 대수 연산
NumPy는 [numpy.linalg](/doc/%EA%B3%BC%ED%95%99/%EC%88%98%ED%95%99/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98/numpy.linalg)
모듈을 통해 행렬 연산을 지원합니다.
A = np.array([[1, 2], [3, 4]])
B = np.array([[, 6], [7, 8]])
# 행렬 곱
C = np.dot(A, B)
# 역행렬
A_inv = np.linalg.inv(A)
# 고유값 분해
eigenvals, eigenvecs = np.linalg.eig(A)
2. 배열 조작
배열의 형태를 변경하거나 결합하는 다양한 함수를 제공합니다.
arr = np.arange(6).reshape((2, 3)) # 형태 변경
stacked = np.vstack([arr, arr]) # 수직 결합
reshaped = arr.flatten() # 1차원으로 펼치기
3. 파일 입출력
NumPy는 배열을 바이너리 형식으로 저장하고 불러오는 기능을 제공합니다.
# 저장
np.save('array.npy', arr)
# 불러오기
loaded_arr = np.load('array.npy')
성능 이점
- 메모리 효율성: NumPy 배열은 파이썬 리스트보다 훨씬 적은 메모리를 사용합니다.
- 속도: C로 구현된 내부 연산 덕분에 수백만 개의 요소를 처리할 때도 빠릅니다.
- 벡터화: 반복문 대신 벡터 연산을 사용해 코드가 간결하고 빠릅니다.
참고 자료 및 관련 문서
- 공식 NumPy 문서
- NumPy GitHub 저장소
- 관련 라이브러리:
- Pandas: NumPy 기반의 데이터 분석 라이브러리
- SciPy: 과학적 계산을 위한 확장 라이브러리
- Matplotlib: 시각화 라이브러리 (NumPy 배열 입력 지원)
NumPy는 현대 파이썬 기반의 데이터 과학 생태계에서 없어서는 안 될 핵심 도구이며, 그 학습은 데이터 분석 및 머신러닝 분야 진입의 첫걸음이라고 할 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.