NumPy
NumPy
개요
NumPy(Numerical Python)는 파이썬에서 과학적 계산을 위한 핵심 라이브러리로, 대규모 수치 데이터를 효율적으로 처리할 수 있도록 다차 배열과 다양한 수학적 연산 기능을 제공합니다. NumPy는 데이터 과학, 머신러닝, 공학, 물리학 등 다양한 분야에서 기초 도구로 사용되며, pandas, SciPy, scikit-learn, matplotlib 등의 주요 데이터 과학 라이브러리들이 내부적으로 NumPy 배열을 기반으로 동작합니다.
NumPy의 핵심 데이터 구조는 [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)
(n-dimensional array)로, 고정된 크기의 동일한 데이터 타입을 가진 요소들로 구성된 다차원 배열입니다. 이 구조는 파이썬의 기본 리스트보다 훨씬 빠르고 메모리 효율적입니다.
주요 기능
1. 다차원 배열(ndarray
)
NumPy의 중심은 ndarray
객체입니다. 이는 1차원(벡터), 2차원(행렬), 3차원 이상의 배열을 모두 표현할 수 있습니다.
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), 차원 수(ndim), 데이터 타입(dtype) 등의 속성을 제공합니다.
print(arr2.shape) # (2, 2)
print(arr2.ndim) # 2
print(arr2.dtype) # int64
2. 배열 생성 함수
NumPy는 다양한 배열 생성 도구를 제공합니다.
함수 | 설명 |
---|---|
[np.zeros](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.zeros)() |
0으로 채워진 배열 생성 |
[np.ones](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.ones)() |
1로 채워진 배열 생성 |
[np.arange](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%B0%B0%EC%97%B4%EC%83%9D%EC%84%B1/np.arange)() |
지정된 범위의 숫자 배열 생성 (step 가능) |
[np.linspace](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%B0%B0%EC%97%B4%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%EC%83%9D%EC%84%B1/np.random.rand)() |
난수로 채워진 배열 생성 |
예시:
zeros = np.zeros((3, 4)) # 3x4 크기의 0 배열
ones = np.ones(5) # 1차원 1 배열
sequence = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
random_arr = np.random.rand(2, 3) # 2x3 난수 배열
3. 벡터화 연산 (Vectorization)
NumPy는 벡터화 연산을 통해 반복문 없이 배열 전체에 대한 연산을 수행할 수 있습니다. 이는 성능을 크게 향상시킵니다.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 요소별 덧셈
result = a + b # [5, 7, 9]
# 요소별 제곱
squared = a ** 2 # [1, 4, 9]
4. 브로드캐스팅 (Broadcasting)
서로 다른 크기의 배열 간 연산을 가능하게 하는 기능입니다. 작은 배열이 자동으로 큰 배열에 맞춰 확장됩니다.
arr = np.array([[1, 2], [3, 4]])
scalar = 10
result = arr + scalar # 모든 요소에 10을 더함
# [[11, 12], [13, 14]]
배열 조작과 인덱싱
1. 슬라이싱과 인덱싱
NumPy 배열은 정수 인덱싱, 슬라이싱, 불리언 인덱싱 등을 지원합니다.
arr = np.array([10, 20, 30, 40, 50])
# 슬라이싱
print(arr[1:4]) # [20, 30, 40]
# 조건 기반 인덱싱
print(arr[arr > 25]) # [30, 40, 50]
2차원 배열에서는 행과 열을 동시에 지정할 수 있습니다.
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix[0, :]) # 첫 번째 행
print(matrix[:, 1]) # 두 번째 열
2. 배열 재구조화
[reshape](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%B0%B0%EC%97%B4%EC%9E%AC%EA%B5%AC%EC%A1%B0%ED%99%94/reshape)()
를 사용하여 배열의 형상을 변경할 수 있습니다.
arr = np.arange(6)
reshaped = arr.reshape((2, 3))
# [[0, 1, 2],
# [3, 4, 5]]
성능 이점
NumPy는 C로 작성된 내부 구현을 통해 파이썬의 반복문보다 훨씬 빠른 연산을 제공합니다. 예를 들어, 백만 개의 숫자를 더하는 작업에서 NumPy는 일반적인 파이썬 리스트 반복보다 수십 배에서 수백 배 빠릅니다.
또한, 메모리 사용도 효율적입니다. NumPy 배열은 연속된 메모리 블록에 데이터를 저장하며, 데이터 타입을 명시함으로써 불필요한 오버헤드를 줄입니다.
주요 응용 분야
- 데이터 전처리: 결측치 처리, 정규화, 스케일링 등
- 수학적 계산: 선형대수, 통계, 미분 방정식 등
- 이미지 처리: 픽셀 데이터를 3차원 배열로 처리
- 시계열 분석: 배열 기반의 고속 연산 활용
- 기계학습: 입력 데이터를 배열 형태로 변환하여 모델에 제공
참고 자료 및 관련 문서
- 공식 NumPy 문서
pandas
: NumPy를 기반으로 한 데이터 분석 라이브러리SciPy
: 과학적 계산을 위한 확장 라이브러리matplotlib
: NumPy 배열을 기반으로 시각화 수행
NumPy는 데이터 과학의 기초이자 핵심 도구로, 파이썬을 활용한 수치 분석 작업을 시작하기 전 반드시 숙지해야 할 라이브러리입니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.