본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 2. · 29 Views
NumPy 최신 기능 완벽 가이드
NumPy의 최신 버전에서 제공하는 강력한 기능들을 실전 예제와 함께 소개합니다. 배열 타입 힌트, 벡터화 연산, 고급 인덱싱 등 고급 개발자를 위한 필수 기능들을 다룹니다.
들어가며
이 글에서는 NumPy 최신 기능 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 배열_타입_힌팅
- 구조화된_배열_활용
- 벡터화된_조건_연산
- 고급_인덱싱_기법
- 브로드캐스팅_활용
- einsum으로_복잡한_텐서_연산
- 메모리_효율적인_뷰_활용
- 범용_함수_벡터화
- 축_기반_연산_마스터
- 고급_난수_생성기
- 메모리_매핑된_배열
- 고급_정렬_및_검색
1. 배열 타입 힌팅
개요
NumPy 1.20+에서 지원하는 타입 힌트를 활용하여 배열의 형태와 데이터 타입을 명시적으로 선언할 수 있습니다.
코드 예제
import numpy as np
from numpy.typing import NDArray
def process_matrix(data: NDArray[np.float64]) -> NDArray[np.float64]:
return data @ data.T
matrix: NDArray[np.float64] = np.array([[1.0, 2.0], [3.0, 4.0]])
result = process_matrix(matrix)
설명
numpy.typing 모듈을 사용하여 배열의 타입을 명시하고, IDE의 자동완성과 타입 체크 기능을 활용할 수 있습니다.
2. 구조화된 배열 활용
개요
여러 데이터 타입을 하나의 배열에 저장하는 구조화된 배열을 생성하고 활용합니다.
코드 예제
import numpy as np
dtype = [('name', 'U10'), ('age', 'i4'), ('score', 'f8')]
students = np.array([
('Alice', 25, 95.5),
('Bob', 23, 87.3)
], dtype=dtype)
print(students['score'].mean())
설명
데이터베이스 테이블과 유사한 구조로 다양한 타입의 데이터를 효율적으로 관리하고 컬럼별 연산을 수행할 수 있습니다.
3. 벡터화된 조건 연산
개요
np.where와 고급 조건문을 사용하여 복잡한 조건 로직을 벡터화된 방식으로 처리합니다.
코드 예제
import numpy as np
scores = np.array([45, 78, 92, 63, 88])
grades = np.select(
[scores >= 90, scores >= 70, scores >= 50],
['A', 'B', 'C'],
default='F'
)
print(grades)
설명
반복문 없이 조건에 따라 다른 값을 할당할 수 있어, 대용량 데이터 처리 시 성능이 크게 향상됩니다.
4. 고급 인덱싱 기법
개요
불리언 마스킹과 팬시 인덱싱을 결합하여 복잡한 데이터 추출 및 수정을 수행합니다.
코드 예제
import numpy as np
data = np.random.randn(100, 3)
mask = (data[:, 0] > 0) & (data[:, 1] < 0.5)
filtered = data[mask]
data[mask, 2] = np.clip(data[mask, 2], -1, 1)
print(filtered.shape)
설명
여러 조건을 조합하여 원하는 데이터를 필터링하고, 조건을 만족하는 요소만 선택적으로 수정할 수 있습니다.
5. 브로드캐스팅 활용
개요
서로 다른 차원의 배열 간 연산을 자동으로 확장하여 효율적으로 처리합니다.
코드 예제
import numpy as np
matrix = np.random.rand(4, 3)
row_means = matrix.mean(axis=1, keepdims=True)
normalized = matrix - row_means
col_std = matrix.std(axis=0)
standardized = normalized / col_std
설명
keepdims를 활용하여 차원을 유지하고, 브로드캐스팅 규칙에 따라 자동으로 배열이 확장되어 연산됩니다.
6. einsum으로 복잡한 텐서 연산
개요
Einstein summation을 사용하여 복잡한 행렬 연산을 간결하게 표현합니다.
코드 예제
import numpy as np
A = np.random.rand(3, 4)
B = np.random.rand(4, 5)
C = np.einsum('ij,jk->ik', A, B)
batch = np.random.rand(10, 3, 3)
trace = np.einsum('bii->b', batch)
설명
einsum은 행렬 곱셈, 전치, trace 등 다양한 텐서 연산을 하나의 통일된 인터페이스로 처리할 수 있습니다.
7. 메모리 효율적인 뷰 활용
개요
배열 복사 없이 뷰를 생성하여 메모리 사용량을 최소화하고 성능을 향상시킵니다.
코드 예제
import numpy as np
large_array = np.arange(1000000)
view = large_array[::2]
view[:10] = -1
print(np.shares_memory(large_array, view))
print(large_array[:20])
설명
슬라이싱으로 생성된 뷰는 원본 배열과 메모리를 공유하므로, 뷰를 수정하면 원본도 변경됩니다.
8. 범용 함수 벡터화
개요
np.vectorize를 사용하여 파이썬 함수를 배열 전체에 효율적으로 적용합니다.
코드 예제
import numpy as np
def custom_func(x, y):
return x**2 + 2*y if x > 0 else y**2
vec_func = np.vectorize(custom_func)
x = np.array([1, -2, 3, -4])
y = np.array([5, 6, 7, 8])
result = vec_func(x, y)
설명
복잡한 조건문이 포함된 커스텀 함수도 벡터화하여 배열 전체에 빠르게 적용할 수 있습니다.
9. 축 기반 연산 마스터
개요
axis 매개변수를 활용하여 다차원 배열의 특정 축을 따라 연산을 수행합니다.
코드 예제
import numpy as np
data = np.random.rand(3, 4, 5)
mean_0 = data.mean(axis=0)
sum_12 = data.sum(axis=(1, 2))
cumsum_1 = data.cumsum(axis=1)
print(mean_0.shape, sum_12.shape)
설명
다차원 데이터에서 원하는 축을 지정하여 통계 연산을 수행하고, 여러 축을 동시에 처리할 수도 있습니다.
10. 고급 난수 생성기
개요
최신 Generator API를 사용하여 재현 가능하고 성능이 우수한 난수를 생성합니다.
코드 예제
import numpy as np
rng = np.random.default_rng(seed=42)
samples = rng.standard_normal(1000)
integers = rng.integers(0, 100, size=50)
choice = rng.choice([1, 2, 3], size=10, p=[0.5, 0.3, 0.2])
print(samples.mean(), integers.max())
설명
default_rng는 기존 numpy.random보다 빠르고 안전하며, 시드 관리가 명확하여 재현 가능한 난수 생성에 적합합니다.
11. 메모리 매핑된 배열
개요
대용량 데이터를 디스크에서 직접 읽어 메모리 부담을 줄이는 메모리 맵 배열을 사용합니다.
코드 예제
import numpy as np
data = np.random.rand(10000, 1000)
np.save('large_data.npy', data)
mmap_array = np.load('large_data.npy', mmap_mode='r')
chunk = mmap_array[1000:2000, :]
print(chunk.shape)
설명
mmap_mode를 사용하면 전체 파일을 메모리에 로드하지 않고 필요한 부분만 접근할 수 있어 대용량 데이터 처리에 유용합니다.
12. 고급 정렬 및 검색
개요
다양한 정렬 알고리즘과 검색 함수를 활용하여 효율적인 데이터 처리를 수행합니다.
코드 예제
import numpy as np
data = np.array([3, 1, 4, 1, 5, 9, 2, 6])
sorted_idx = np.argsort(data)
partition_idx = np.argpartition(data, 3)
search_idx = np.searchsorted(np.sort(data), [2, 5])
print(data[sorted_idx], search_idx)
설명
argsort는 정렬된 인덱스를, argpartition은 k번째 요소를 기준으로 분할하며, searchsorted는 정렬된 배열에서 빠르게 삽입 위치를 찾습니다.
마치며
이번 글에서는 NumPy 최신 기능 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Python #NumPy #TypeHints #Vectorization #AdvancedIndexing
이 카드뉴스가 포함된 코스
댓글 (0)
함께 보면 좋은 카드 뉴스
vLLM 통합 완벽 가이드
대규모 언어 모델 추론을 획기적으로 가속화하는 vLLM의 설치부터 실전 서비스 구축까지 다룹니다. PagedAttention과 연속 배칭 기술로 GPU 메모리를 효율적으로 활용하는 방법을 배웁니다.
Web UI Demo 구축 완벽 가이드
Gradio를 활용하여 머신러닝 모델과 AI 서비스를 위한 웹 인터페이스를 구축하는 방법을 다룹니다. 코드 몇 줄만으로 전문적인 데모 페이지를 만들고 배포하는 과정을 초급자도 쉽게 따라할 수 있도록 설명합니다.
Sandboxing & Execution Control 완벽 가이드
AI 에이전트가 코드를 실행할 때 반드시 필요한 보안 기술인 샌드박싱과 실행 제어에 대해 알아봅니다. 격리된 환경에서 안전하게 코드를 실행하고, 악성 동작을 탐지하는 방법을 단계별로 설명합니다.
Voice Design then Clone 워크플로우 완벽 가이드
AI 음성 합성에서 일관된 캐릭터 음성을 만드는 Voice Design then Clone 워크플로우를 설명합니다. 참조 음성 생성부터 재사용 가능한 캐릭터 구축까지 실무 활용법을 다룹니다.
Tool Use 완벽 가이드 - Shell, Browser, DB 실전 활용
AI 에이전트가 외부 도구를 활용하여 셸 명령어 실행, 브라우저 자동화, 데이터베이스 접근 등을 수행하는 방법을 배웁니다. 실무에서 바로 적용할 수 있는 패턴과 베스트 프랙티스를 담았습니다.