numpy

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

numpy

NumPy(넘파이)는 Python 기반의 수치 계산을 위한 핵심 라이브러리로, 고성능 다차원 배열 객체([ndarray](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B5%AC%EC%A1%B0/%ED%85%90%EC%84%9C/ndarray))와 이를 다루기 위한 다양한 수학적 함수들을 제공합니다. 데이터 과학, 기계 학습, 과학 계산, 이미지 처리 등 다양한 분야에서 기본 도구로 사용되며, Pandas, SciPy, scikit-learn, TensorFlow, PyTorch 등의 라이브러리가 내부적으로 NumPy를 기반으로 구축되어 있습니다.


개요

NumPy는 "Numerical Python"의 약자로, 2005년 Travis Oliphant에 의해 개발되어 공개되었습니다. 이전의 Numeric과 Numarray 라이브러리의 장점을 통합하여 만들어졌으며, Python이 단순한 스크립팅 언어를 넘어서 과학적 컴퓨팅 플랫폼으로 자리 잡는 데 결정적인 역할을 했습니다.

NumPy의 핵심은 ndarray(N-dimensional array)라는 자료 구조로, 동일한 데이터 타입의 요소를 효율적으로 저장하고 빠르게 연산할 수 있도록 설계되었습니다. 일반 Python 리스트에 비해 메모리 효율이 뛰어나고, 벡터화 연산(vectorized operations)을 지원하여 반복문 없이도 배열 전체에 대한 수학 연산을 수행할 수 있습니다.


주요 기능

1. ndarray: 다차원 배열 객체

ndarray는 NumPy의 핵심 데이터 구조로, 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]]

주요 속성

  • shape: 배열의 차원 크기 (예: (3, 4))
  • dtype: 요소의 데이터 타입 (예: int64, float32)
  • size: 전체 요소 수
  • ndim: 차원 수

2. 배열 생성 함수

NumPy는 다양한 방식으로 배열을 생성할 수 있는 함수를 제공합니다.

함수 설명
np.zeros((2,3)) 0으로 채워진 배열 생성
np.ones((2,2)) 1로 채워진 배열 생성
np.full((2,2), 7) 특정 값으로 채워진 배열 생성
np.arange(0, 10, 2) 범위 내에서 일정 간격의 숫자 생성 (0, 2, 4, 6, 8)
np.linspace(0, 1, 5) 시작과 끝 사이를 균등하게 나눈 배열 생성
np.random.rand(3,3) 난수로 구성된 배열 생성

3. 벡터화 연산 (Vectorization)

NumPy는 벡터화 연산을 통해 배열 전체에 대한 연산을 반복문 없이 빠르게 수행합니다. 이는 내부적으로 C 언어로 구현되어 있어 Python 루프보다 수십에서 수백 배 빠릅니다.

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 요소별 덧셈 (자동으로 벡터화됨)
c = a + b  # [5 7 9]

이러한 연산은 덧셈, 뺄셈, 곱셈(*), 나눗셈(/)뿐 아니라 지수, 로그, 삼각 함수 등 수학 함수에도 적용 가능합니다.


4. 브로드캐스팅 (Broadcasting)

브로드캐스팅은 크기가 다른 배열 간 연산을 가능하게 해주는 강력한 기능입니다. 작은 배열이 자동으로 큰 배열의 형태에 맞춰 확장됩니다.

a = np.array([[1, 2], [3, 4]])  # (2, 2)
b = np.array([10, 20])           # (2,)
c = a + b  # b가 [[10, 20], [10, 20]]로 확장됨

브로드캐스팅은 메모리 복사를 하지 않기 때문에 매우 효율적입니다.


5. 인덱싱과 슬라이싱

NumPy 배열은 고급 인덱싱을 지원합니다.

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 슬라이싱
print(arr[0:2, 1:3])  # [[2 3], [5 6]]

# 불리언 인덱싱
print(arr[arr > 5])  # [6 7 8 9]

# 정수 배열 인덱싱
print(arr[[0, 2], [1, 2]])  # [2 9]


6. 선형 대수 연산

NumPy는 numpy.linalg 모듈을 통해 행렬 연산을 지원합니다.

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 행렬 곱
C = np.dot(A, B)  # 또는 A @ B

# 전치
A.T

# 행렬식
np.linalg.det(A)

# 고유값 분해
eigenvals, eigenvecs = np.linalg.eig(A)


성능 이점

  • 속도: C로 구현된 내부 연산으로 Python 반복문보다 훨씬 빠름.
  • 메모리 효율: 동일한 데이터 타입만 저장하므로 메모리 사용 최소화.
  • 편의성: 수학적 직관에 가까운 문법 제공.

주의사항 및 한계

  • 동일한 데이터 타입만 저장 가능: 배열 생성 시 모든 요소는 동일한 dtype을 가져야 함.
  • 고정 크기: 배열 생성 후 크기 변경이 비효율적 (반복적 추가 시 list가 더 나을 수 있음).
  • 학습 곡선: 인덱싱, 브로드캐스팅 등 개념 이해에 시간이 필요할 수 있음.

관련 라이브러리

NumPy는 파이썬 데이터 생태계의 기반으로, 다음과 같은 라이브러리들과 긴밀히 연동됩니다:

  • Pandas: 데이터 분석용 라이브러리. 내부적으로 NumPy 배열 사용.
  • Matplotlib: 시각화 라이브러리. 그래프 데이터로 NumPy 배열 전달.
  • SciPy: 과학 계산용 라이브러리. NumPy 위에 구축.
  • Scikit-learn: 머신러닝 라이브러리. 입력 데이터는 주로 NumPy 배열 형식.

참고 자료

Tip: NumPy 사용 시 항상 import numpy as np 관례를 따르는 것이 일반적입니다.

AI 생성 콘텐츠 안내

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

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

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