[파이썬][Numpy] 벡터화 연산과 성능 최적화 예제

Numpy의 벡터화 연산과 성능 최적화에 대한 예제를 제공하겠습니다. Numpy는 벡터화 연산을 통해 배열 요소 간의 연산을 빠르고 효율적으로 수행할 수 있도록 지원합니다.

벡터화 연산 예제:

import numpy as np

# 배열 생성
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([10, 20, 30, 40, 50])

# 요소별 덧셈
result = arr1 + arr2
print("요소별 덧셈:")
print(result)

# 요소별 곱셈
result = arr1 * arr2
print("\n요소별 곱셈:")
print(result)

위의 코드에서는 두 개의 배열을 생성하고 각 배열 간에 요소별로 덧셈과 곱셈을 수행하는 벡터화 연산을 보여줍니다. 이러한 연산은 각 요소가 독립적으로 계산되므로 빠르게 수행됩니다.

실행 결과는 다음과 같을 것입니다:

요소별 덧셈:
[11 22 33 44 55]

요소별 곱셈:
[ 10  40  90 160 250]

성능 최적화 예제:

Numpy를 사용할 때 성능을 최적화하는 한 가지 방법은 Numpy의 벡터화 연산을 활용하는 것입니다. 벡터화 연산은 Python의 루프 대신 내부적으로 C로 구현된 Numpy 함수를 사용하여 배열 연산을 처리하므로 속도가 훨씬 빠릅니다.

예를 들어, 같은 작업을 수행하는 Python의 루프와 Numpy의 벡터화 연산을 비교해보겠습니다:

import numpy as np
import time

# 큰 배열 생성
arr1 = np.random.rand(1000000)
arr2 = np.random.rand(1000000)

# Python 루프를 사용한 덧셈
start_time = time.time()
result = []
for i in range(len(arr1)):
    result.append(arr1[i] + arr2[i])
end_time = time.time()
print("Python 루프 시간:", end_time - start_time, "초")

# Numpy 벡터화 연산을 사용한 덧셈
start_time = time.time()
result = arr1 + arr2
end_time = time.time()
print("Numpy 벡터화 연산 시간:", end_time - start_time, "초")

이 코드는 두 큰 배열의 요소별 덧셈을 Python 루프로 수행하고, 그 성능을 Numpy의 벡터화 연산과 비교합니다. 벡터화 연산은 대규모 데이터에서 특히 더 큰 성능 향상을 제공합니다.

성능 최적화를 위해 Numpy를 사용할 때는 가능한 한 벡터화 연산을 활용하고, 반복문 대신 Numpy 함수를 사용하면 됩니다.