NumPy(Numerical Python의 약자)는 파이썬의 과학 컴퓨팅에 있어 핵심적인 라이브러리입니다. 대규모 다차원 배열과 행렬을 효율적으로 처리할 수 있는 도구를 제공하며, 이러한 배열에서 작동하는 수학 함수 라이브러리도 방대하게 제공합니다. 이 글에서는 NumPy의 주요 기능과 사용법에 대해 자세히 알아보겠습니다.
1. NumPy 소개
NumPy는 1995년에 시작된 Numeric이라는 프로젝트에서 발전한 라이브러리로, 현재는 과학, 공학 분야의 파이썬 프로그래밍에서 필수적인 도구가 되었습니다. 주요 특징은 다음과 같습니다:
- 빠른 다차원 배열 객체(ndarray)
- 브로드캐스팅 기능을 포함한 다양한 배열 연산 도구
- 선형 대수학, 푸리에 변환, 난수 생성 등의 도구
- C/C++ 및 Fortran 코드와의 통합 기능
2. NumPy 설치 및 임포트
NumPy는 pip를 사용하여 쉽게 설치할 수 있습니다:
pip install numpy
설치 후 파이썬 스크립트에서 다음과 같이 임포트할 수 있습니다:
import numpy as np # NumPy를 np라는 별칭으로 임포트
3. NumPy 배열 (ndarray)
NumPy의 핵심은 ndarray(n-dimensional array) 객체입니다. 이는 동일한 타입의 아이템들로 구성된 다차원 배열입니다.
3.1 배열 생성
# 리스트로부터 배열 생성
arr1 = np.array([1, 2, 3, 4, 5])
# 0으로 채워진 3x3 배열 생성
arr2 = np.zeros((3, 3))
# 1로 채워진 2x3 배열 생성
arr3 = np.ones((2, 3))
# 특정 범위의 균일한 간격의 숫자로 배열 생성
arr4 = np.arange(0, 10, 2)
# 특정 범위를 지정한 개수만큼 균등하게 나눈 배열 생성
arr5 = np.linspace(0, 1, 5)
# 랜덤한 값으로 배열 생성
arr6 = np.random.rand(3, 3)
3.2 배열 속성
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 배열의 형태: (2, 3)
print(arr.ndim) # 배열의 차원: 2
print(arr.dtype) # 배열의 데이터 타입: int64
print(arr.size) # 배열의 전체 요소 개수: 6
3.3 배열 인덱싱과 슬라이싱
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[1, 1]) # 5
print(arr[0:2, 1:3]) # [[2 3]
# [5 6]]
4. NumPy 연산
NumPy는 배열 간의 연산을 매우 효율적으로 수행합니다.
4.1 기본 연산
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(a ** 2) # [1 4 9]
4.2 브로드캐스팅
브로드캐스팅은 shape가 다른 배열 간의 연산을 가능하게 합니다.
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])
print(a + b) # [[11 22 33]
# [14 25 36]]
4.3 유니버설 함수 (ufunc)
NumPy는 배열의 각 요소에 적용되는 다양한 수학 함수를 제공합니다.
a = np.array([1, 2, 3])
print(np.sqrt(a)) # [1. 1.41421356 1.73205081]
print(np.exp(a)) # [ 2.71828183 7.3890561 20.08553692]
print(np.sin(a)) # [0.84147098 0.90929743 0.14112001]
5. 선형 대수학
NumPy는 강력한 선형 대수학 기능을 제공합니다.
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.dot(a, b)) # 행렬 곱
print(np.linalg.inv(a)) # 역행렬
print(np.linalg.det(a)) # 행렬식
6. 형상 조작
배열의 형상을 변경하는 다양한 방법이 있습니다.
a = np.array([[1, 2], [3, 4], [5, 6]])
print(a.reshape(2, 3)) # 형상 변경
print(a.T) # 전치 행렬
7. 파일 입출력
NumPy는 배열을 파일로 저장하고 불러올 수 있는 기능을 제공합니다.
arr = np.array([[1, 2, 3], [4, 5, 6]])
np.save('my_array', arr) # .npy 파일로 저장
loaded_arr = np.load('my_array.npy') # 파일에서 배열 로드
8. 고급 인덱싱
NumPy는 불리언 인덱싱과 팬시 인덱싱 같은 고급 인덱싱 기능을 제공합니다.
arr = np.array([1, 2, 3, 4, 5])
# 불리언 인덱싱
print(arr[arr > 2]) # [3 4 5]
# 팬시 인덱싱
indices = [1, 3, 4]
print(arr[indices]) # [2 4 5]
NumPy는 파이썬에서 과학 컴퓨팅을 위한 필수적인 라이브러리입니다. 효율적인 다차원 배열 처리, 브로드캐스팅, 다양한 수학 함수 등을 통해 데이터 분석, 머신 러닝, 신호 처리 등 다양한 분야에서 활용되고 있습니다.
NumPy의 성능은 C로 구현된 내부 로직 덕분에 매우 뛰어나며, 이는 대규모 데이터를 다룰 때 특히 유용합니다. 또한 SciPy, Pandas, Matplotlib 등 다른 과학 컴퓨팅 라이브러리들과의 호환성도 뛰어나, 이들과 함께 사용하여 더욱 강력한 데이터 처리 및 분석 환경을 구축할 수 있습니다.
NumPy를 마스터하는 것은 파이썬을 이용한 과학 컴퓨팅, 데이터 사이언스, 머신 러닝 등의 분야로 나아가는 데 있어 중요한 첫걸음이 될 것입니다. 이 강력한 도구를 활용하여 여러분의 데이터 분석 능력을 한 단계 높여보시기 바랍니다.