Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python meshgrid에 함수를 적용하는 방법 완벽 가이드

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의 모든 좌표 지점에 원하는 함수를 깔끔하고 효율적으로 적용할 수 있습니다.