[python] 파이썬 Vectorization? (반복문 대체, 속도 향상)

파이썬의 numpy 모듈은 반복문을 대체할 수 있는 Vectorization 기능을 구현하고 있습니다. 예를 들어 아래와 같은 함수의 그래프를 그린다고 가정해 봅시다.


그래프를 그리기 위해서는 기본적으로 (x, y) 튜플에 대한 데이터셋이 필요합니다. 전형적인 방법으로는 반복문을 이용하여 데이터셋을 구하고 그래프를 그리는 방법입니다.


import numpy as np
import matplotlib.pyplot as plt

num_points = 5
x_min, x_max = 0, 4
x_values = np.linspace(x_min, x_max, num_points)

y_values = []
for x in x_values:
    y_values.append(x**2)

plt.plot(x_values, y_values)
plt.show()


위 코드의 결과는 아래와 같습니다.


(x, y) 튜플 데이터셋의 y값을 구하기 위해서 for 반복문을 활용했습니다. numpy 기본 배열타입인 ndarray의 vectorization 기능을 활용하면 아래 코드와 같이 작성할 수 있습니다.


import numpy as np
import matplotlib.pyplot as plt

num_points = 5
x_min, x_max = 0, 4
x_values = np.linspace(x_min, x_max, num_points)
y_values = x_values ** 2

plt.plot(x_values, y_values)
plt.show()


위 코드에서는 배열에 거듭제곱 연산자를 바로 적용했습니다. 거듭제곱 연산자가 배열의 각 항목에 적용되어 결과적으로 이전코드와 동일한 데이터셋을 만들게 됩니다. 이는 거듭제공 연산자뿐만 아니라 다른 연산자도 적용가능합니다.


그리고 vectorization 기능은 구문의 간결성 뿐만 아니라 성능에서도 압도적인 우위를 보여줍니다. 따라서 가능하다면 ndarray의 vectorization 기능을 적극 활용하시면 좋을 것 같습니다.


끝.

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

NPN, PNP 트랜지스터 차이점

3선 결선식 센서의 타입 PNP, NPN

제너 다이오드에 저항을 연결하는 이유

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

커패시터에 저장된 에너지 계산

3상 모터 전력에서 전류 계산하기 (How to Convert Three-Phase Power to Amps)

[공압밸브] 5포트 2웨이 & 4포트 2웨이, 단동 VS 복동 차이점

SSR과 기계식 릴레이 차이점