numpy
numpy
개요
NumPy(Numerical Python의 약자)는 파이썬에서 과학적 계산과 데이터 분석을 위한 핵심 라이브러리 중 하나로, 고성능의 다차 배열 객체(nd
)와 이를 효율 다루기 위한 수학적 함수 제공합니다. NumPy는 Python의 기본보다 훨씬 빠르고 메모리 효율적인 배열 연산을 가능하게 하며, 데이터과학, 기계학습, 물리학, 공학 등 다양한 분야에서 필수적으로 사용됩니다.
NumPy는 2005년에 Travis Oliphant에 의해 개발되었으며, 현재는 커뮤니티 기반으로 지속적으로 유지보수되고 있습니다. 이 라이브러리는 pandas, matplotlib, scikit-learn, TensorFlow 등 주요 데이터과학 도구들의 기반이 되는 핵심 구성 요소입니다.
주요 기능
1. [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의 핵심은 ndarray
(n-dimensional array)입니다. 이 객체는 동일한 데이터 타입의 요소로 구성된 고정 크기의 배열이며, C 언어 수준의 성능을 제공합니다.
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
는 다음과 같은 특징을 가집니다:
- 고정 크기: 배열 생성 후 크기 변경이 비효율적입니다.
- 동일한 데이터 타입: 모든 요소는 같은 타입이어야 하며, 메모리 배치가 연속적입니다.
- 벡터화 연산: 요소별 연산을 루프 없이 수행 가능 (예: arr * 2
).
2. 수학적 연산 지원
NumPy는 선형대수, 통계, 삼각함수, 지수/로그 함수 등 다양한 수학적 연산을 제공합니다.
# 기본 연산
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9]
print(a * b) # [4 10 18]
print(np.sqrt(a)) # [1. 1.41421356 1.73205081]
3. 배열 생성 함수
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)() |
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)() |
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)() |
범위 내 숫자 배열 생성 (step 가능) |
[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)() |
균등 간격의 숫자 배열 생성 |
[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%20%EC%83%9D%EC%84%B1/np.random.rand)() |
난수 배열 생성 |
zeros = np.zeros((2, 3)) # 2x3 배열, 모든 요소 0
ones = np.ones((3,)) # 1차원 배열 [1. 1. 1.]
range_arr = np.arange(0, 10, 2) # [0 2 4 6 8]
linspace_arr = np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
4. 배열 조작
NumPy는 배열의 형태를 변경하거나 결합하는 다양한 기능을 제공합니다.
arr = np.array([[1, 2], [3, 4]])
# 형태 변경 (reshape)
reshaped = arr.reshape(4,) # [1 2 3 4]
# 전치 (transpose)
transposed = arr.T # [[1 3], [2 4]]
# 배열 결합
a = np.array([1, 2])
b = np.array([3, 4])
concat = np.concatenate([a, b]) # [1 2 3 4]
성능 및 효율성
NumPy는 C로 구현된 내부 루틴을 사용하여 연산을 수행하므로, Python의 기본 반복문보다 수십에서 수백 배 빠릅니다. 특히 벡터화(vectorization)를 통해 반복문 없이 전체 배열에 대해 연산을 수행할 수 있어, 코드도 간결해지고 성능도 향상됩니다.
예를 들어, 100만 개의 숫자에 각각 2를 더하는 작업을 비교하면:
import numpy as np
import time
# Python 리스트 (느림)
py_list = list(range(1000000))
start = time.time()
result = [x + 2 for x in py_list]
print("Python list:", time.time() - start)
# NumPy 배열 (빠름)
np_array = np.arange(1000000)
start = time.time()
result = np_array + 2
print("NumPy array:", time.time() - start)
이러한 성능 차이는 대용량 데이터 처리에서 특히 중요합니다.
데이터과학에서의 역할
NumPy는 데이터과학 파이프라인의 기초를 형성합니다. 주요 활용 사례는 다음과 같습니다:
- 데이터 전처리: 결측치 처리, 정규화, 스케일링 등
- 수치 계산: 행렬 연산, 통계 분석
- 기계학습 입력 형식: 대부분의 ML 라이브러리는 NumPy 배열을 입력으로 요구
- 시각화 준비: matplotlib 등과 연계하여 데이터를 시각화하기 전 처리
또한, pandas의 DataFrame
과 Series
내부에서도 NumPy 배열이 사용되며, 두 라이브러리 간의 상호 운용성이 매우 높습니다.
설치 및 사용 방법
NumPy는 일반적으로 pip
또는 conda
를 통해 설치합니다.
pip install numpy
또는 Anaconda 사용자라면:
conda install numpy
사용 시에는 관례적으로 np
라는 별칭(alias)으로 임포트합니다.
import numpy as np
참고 자료 및 관련 문서
- 공식 문서
- GitHub 저장소
- 관련 라이브러리:
- pandas: 데이터 분석을 위한 고수준 구조 제공
- SciPy: 과학적 계산 확장 라이브러리
- matplotlib: 시각화 도구 (NumPy 배열과 호환)
- scikit-learn: 머신러닝 라이브러리 (입력 데이터로 NumPy 배열 사용)
NumPy는 데이터과학 생태계의 기반이 되는 도구로서, 파이썬을 사용하는 데이터 전문가라면 반드시 숙지해야 할 라이브러리입니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.