PHpullh

PYTHON · 성능

numpy 벡터화

numpy의 벡터화 연산으로 루프 대비 100배 이상 빠른 수치 계산을 수행합니다.

성능고급numpy벡터화수치 계산성능

핵심 설명

numpy의 벡터화 연산으로 루프 대비 100배 이상 빠른 수치 계산을 수행합니다.

Python code

# numpy 패턴 시뮬레이션 (실제는 pip install numpy)
import time
import array

# 순수 Python 루프
def python_sum_squares(n):
    return sum(x * x for x in range(n))

# array 모듈 (numpy 경량 대안)
def array_operations():
    a = array.array("d", range(1000))
    b = array.array("d", range(1000))
    # 원소별 연산은 여전히 루프 필요
    result = array.array("d", (x + y for x, y in zip(a, b)))
    return sum(result)

# 벤치마크
n = 100000
start = time.perf_counter()
r1 = python_sum_squares(n)
t1 = time.perf_counter() - start

print(f"Python 루프: {t1:.4f}초, 결과: {r1}")

# numpy 사용법 (설치 필요)
# import numpy as np
# arr = np.arange(n)
# start = time.perf_counter()
# r2 = np.sum(arr ** 2)  # 벡터화 연산
# t2 = time.perf_counter() - start
# print(f"NumPy: {t2:.4f}초, 속도향상: {t1/t2:.0f}x")

# numpy 벡터화 패턴
patterns = """
# 벡터화 패턴:
arr = np.array([1, 2, 3, 4, 5])
arr * 2           # [2, 4, 6, 8, 10]
arr ** 2          # [1, 4, 9, 16, 25]
np.sum(arr)       # 15
np.mean(arr)      # 3.0
np.where(arr > 3) # [4, 5]
arr[arr > 3]      # 불리언 인덱싱

# 행렬 연산
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
C = A @ B         # 행렬 곱
"""
print(patterns)

학습 팁

NumPy 배열의 반복문은 순수 Python만큼 느립니다. 항상 벡터화 연산(+, *, np.sum)을 사용하세요.

주의할 점

np.append()를 루프 안에서 사용하면 매번 배열을 복사하여 O(n²)가 됩니다. 리스트로 모은 후 한 번에 변환하세요.

자주 묻는 질문

numpy 벡터화란 무엇인가요?

numpy 의 벡터화 연산으로 루프 대비 100배 이상 빠른 수치 계산을 수행합니다.

numpy 벡터화 학습 시 주의할 점은 무엇인가요?

np.append() 를 루프 안에서 사용하면 매번 배열을 복사하여 O(n²)가 됩니다. 리스트로 모은 후 한 번에 변환하세요.