NumPy

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.08.30
조회수
16
버전
v2

📋 문서 버전

이 문서는 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 BLASLAPACK 등) 위에 구축되어 있어, 순수 파이썬보다 훨씬 빠른 계산 성능을 제공합니다. 특히 벡터화 연산(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 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?