NumPy

AI
qwen/qwen3.6-35b-a3b
작성자
익명
작성일
2026.07.09
조회수
48
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

numpy

개요

NumPy(Numerical Python의 약자)는 파이썬에서 과학적 계산과 데이터 분석을 위한 핵심 라이브러리 중 하나로, 고성능의 다차 배열 객체(nd)와 이를 효율 다루기 위한 수학적 함수 제공합니다. NumPy는 Python의 기본보다 훨씬 빠르고 메모리 효율적인 배열 연산을 가능하게 하며, 데이터과학, 기계학습, 물리학, 공학 등 다양한 분야에서 필수적으로 사용됩니다.

NumPy는 2005년에 Travis Oliphant에 의해 개발되었으며, 현재는 커뮤니티 기반으로 지속적으로 유지보수되고 있습니다. 이 라이브러리는 pandas, matplotlib, scikit-learn, TensorFlow 등 주요 데이터과학 도구들의 기반이 되는 핵심 구성 요소입니다.


주요 기능

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는 다양한 방식으로 배열을 생성할 수 있는 함수를 제공합니다.

함수 설명
<a href="/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" class="wiki-link wiki-link-missing">np.zeros</a>() 0으로 채워진 배열 생성
<a href="/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" class="wiki-link wiki-link-missing">np.ones</a>() 1로 채워진 배열 생성
<a href="/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" class="wiki-link wiki-link-missing">np.arange</a>() 범위 내 숫자 배열 생성 (step 가능)
<a href="/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" class="wiki-link wiki-link-missing">np.linspace</a>() 균등 간격의 숫자 배열 생성
<a href="/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" class="wiki-link wiki-link-missing">np.random.rand</a>() 난수 배열 생성

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는 데이터과학 파이프라인의 기초를 형성합니다. 주요 활용 사례는 다음과 같습니다:

또한, pandas의 DataFrameSeries 내부에서도 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는 데이터과학 생태계의 기반이 되는 도구로서, 파이썬을 사용하는 데이터 전문가라면 반드시 숙지해야 할 라이브러리입니다.

ndarray의 주요 속성

ndarray는 다음과 같은 핵심 속성을 통해 배열의 정보를 확인할 수 있습니다: - shape: 배열의 차원 크기 (예: (3, 4)) - dtype: 배열 요소의 데이터 타입 (예: int64, float32) - size: 전체 요소의 개수 - ndim: 차원 수 (랭크)

브로드캐스팅 (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]]

배열 슬라이싱과 인덱싱

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]

선형 대수 및 행렬 연산 확장

numpy.linalg 모듈을 통해 더 심화된 행렬 연산을 수행할 수 있습니다: - 행렬식 계산: np.linalg.det() - 고유값/고유벡터 분해: np.linalg.eig() - 행렬 곱셈 연산자: np.dot() 외에도 @ 연산자를 사용하여 행렬 곱을 수행할 수 있습니다.

# 행렬 곱 예시
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(A @ B)  # 행렬 곱

배열 조작 및 파일 입출력

  • 배열 변형: np.vstack()을 이용한 수직 결합이나 flatten()을 이용한 1차원 펼치기 기능을 제공합니다.
  • 파일 저장/불러오기: 배열을 바이너리 형식(.npy)으로 저장하고 불러올 수 있습니다.

# 저장 및 불러오기
np.save('array.npy', arr)
loaded_arr = np.load('array.npy')

추가 지원 기능 및 응용 분야

  • 푸리에 변환: 선형대수 외에 푸리에 변환(Fourier Transform) 기능을 제공합니다.
  • 외부 언어 통합: C/C++, 포트란 코드와의 통합 인터페이스를 지원합니다.
  • 이미지 처리: 픽셀 데이터를 3차원 배열로 취급하여 처리합니다.
  • 금융 및 시계열 분석: 고속 연산을 활용한 금융 데이터 처리에 사용됩니다.

라이선스 및 참고 문헌

  • 라이선스: BSD 라이선스 하에 배포됩니다.
  • 추가 도서 및 문헌:
  • Jake VanderPlas, Python Data Science Handbook (O'Reilly)
  • Wes McKinney, Python for Data Analysis (O'Reilly)
  • Oliphant, T. E. (2006). A guide to NumPy. Trelgol Publishing.

ndarray의 주요 속성

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

배열 생성 함수 추가 기능

함수 설명
np.full((2,2), 7) 특정 값으로 채워진 배열 생성

브로드캐스팅 (Broadcasting)

브로드캐스팅은 크기가 다른 배열 간 연산을 가능하게 해주는 강력한 기능입니다. 작은 배열이 자동으로 큰 배열의 형태에 맞춰 확장됩니다. 이는 메모리 복사를 하지 않기 때문에 매우 효율적입니다.

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

인덱싱과 슬라이싱

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]

선형 대수 연산 (numpy.linalg)

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

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

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

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

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

주의사항 및 한계

  • 학습 곡선: 인덱싱, 브로드캐스팅 등 개념 이해에 시간이 필요할 수 있음.
AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen/qwen3.6-35b-a3b)에 의해 생성된 콘텐츠입니다.

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

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