meshgrid는 좌표 벡터(coordinate vector)로부터 좌표 행렬(coordinate matrix)을 생성하는 NumPy의 대표적인 기능입니다. 이 글에서는 파이썬 meshgrid 또는 배열 데이터에 사용자 정의 함수를 적용하는 방법을 예제와 함께 자세히 살펴보겠습니다.
@np.vectorize 데코레이터란?
배열의 각 요소에 함수를 적용하는 가장 간단한 방법은 NumPy가 제공하는 @np.vectorize 데코레이터입니다. 이 데코레이터는 스칼라 값 두 개를 입력받아 처리하도록 작성된 일반적인 파이썬 함수를 배열 전체에 자동으로 확장(브로드캐스팅)해 줍니다.
예제 코드
두 개의 리스트 x와 y를 준비하고, @np.vectorize 데코레이터를 적용한 함수로 각 요소를 더해 보겠습니다.
import numpy as np
@np.vectorize
def foo(a, b):
return a + b
x = [0.0, 0.5, 1.0]
y = [0.0, 1.0, 8.0]
print("Function Output: ", foo(x, y))위 코드에서 foo는 원래 단일 숫자 쌍을 더하는 아주 간단한 함수입니다. 하지만 @np.vectorize 데코레이터 덕분에 리스트 x와 y의 요소들이 위치별로 자동으로 짝지어져 한 번에 연산됩니다.
실행 결과
Function Output: [0. 1.5 9. ]
출력 결과를 보면 [0+0, 0.5+1, 1+8], 즉 각 위치의 요소끼리 더해진 [0, 1.5, 9]가 반환된 것을 확인할 수 있습니다.
실제 meshgrid에 함수 적용하기
@np.vectorize는 meshgrid로 생성한 2차원 좌표 행렬에도 그대로 사용할 수 있습니다. 다음과 같이 np.meshgrid로 격자를 만든 뒤 함수를 호출하면, 모든 격자점에 대해 함수가 일괄 계산됩니다.
xx, yy = np.meshgrid(x, y) result = foo(xx, yy) print(result)
이처럼 @np.vectorize 데코레이터를 활용하면 복잡한 반복문 없이도 meshgrid의 모든 좌표 지점에 원하는 함수를 깔끔하고 효율적으로 적용할 수 있습니다.