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

파이썬 NumPy meshgrid() 완벽 가이드 – 좌표 벡터로 좌표 행렬 생성하기

numpy.meshgrid()는 1차원 좌표 벡터로부터 2차원 좌표 행렬을 생성하는 함수입니다. 그래프 그리기, 함수 시각화, 격자(grid) 위에서의 연산 등에 널리 활용되며, 문법은 다음과 같습니다.

numpy.meshgrid(*xi, **kwargs)

주요 매개변수

  • x1, x2, …, xn − 격자를 구성할 각 축의 좌표값을 담고 있는 1차원 배열입니다.

  • indexing − 출력 행렬의 인덱싱 방식을 지정하는 선택적 매개변수입니다. 기본값은 데카르트 좌표계 방식인 'xy'이며, 행렬 인덱스 방식인 'ij'로 변경할 수 있습니다.

  • sparse − 메모리를 절약하기 위해 희소(sparse) 형태의 그리드를 반환하려면 True로 설정합니다. 기본값은 False입니다.

  • copy − False로 설정하면 원본 배열의 뷰(view)를 반환하여 메모리를 아낄 수 있습니다. 기본값은 True입니다.

예제 1 – sparse 옵션 사용하기

다음 예제에서는 sparse=True 옵션을 적용한 meshgrid의 동작을 확인해 보겠습니다.

# numpy 임포트
import numpy as np

# 입력 배열
x = np.array([1,2,3,4,5])
y = np.array([11, 12, 13, 14, 15])
print("Input x :\n", x)
print("Input y :\n", y)

# meshgrid() 함수 실행
xx, yy = np.meshgrid(x, y, sparse=True)
print("Meshgrid of X:", xx)
print("Meshgrid of Y:\n", yy)

실행 결과

Input x :
 [1 2 3 4 5]
Input y :
 [11 12 13 14 15]
Meshgrid of X: [[1 2 3 4 5]]
Meshgrid of Y:
 [[11]
 [12]
 [13]
 [14]
 [15]]

sparse=True를 사용하면 x좌표는 한 행(1×N) 형태로, y좌표는 한 열(M×1) 형태로만 저장됩니다. 전체 M×N 크기의 행렬을 실제로 생성하지 않기 때문에 대규모 격자 계산에서 메모리를 크게 절약할 수 있으며, NumPy의 브로드캐스팅(broadcasting) 규칙 덕분에 일반 meshgrid 결과와 동일하게 연산에 활용할 수 있습니다.

예제 2 – linspace와 meshgrid의 차이

이번에는 linspace()meshgrid()의 차이를 살펴보겠습니다. linspace는 지정한 구간을 균등한 간격으로 나눈 값을 생성하는 함수이고, meshgrid는 이렇게 만든 값들을 행렬 형태로 확장합니다.

# numpy 임포트
import numpy as np

# linspace 함수
a = np.linspace(3, 4, 4)
b = np.linspace(4, 5, 6)
print("linspace of a :", a)
print("linspace of b :", b)

# meshgrid 함수
xa, xb = np.meshgrid(a, b)
print("Meshgrid of xa :\n", xa)
print("Meshgrid of xb :\n", xb)

실행 결과

linspace of a : [3.         3.33333333 3.66666667 4.        ]
linspace of b : [4.  4.2 4.4 4.6 4.8 5. ]
Meshgrid of xa :
 [[3.         3.33333333 3.66666667 4.        ]
 [3.         3.33333333 3.66666667 4.        ]
 [3.         3.33333333 3.66666667 4.        ]
 [3.         3.33333333 3.66666667 4.        ]
 [3.         3.33333333 3.66666667 4.        ]
 [3.         3.33333333 3.66666667 4.        ]]
Meshgrid of xb :
 [[4.  4.  4.  4. ]
 [4.2 4.2 4.2 4.2]
 [4.4 4.4 4.4 4.4]
 [4.6 4.6 4.6 4.6]
 [4.8 4.8 4.8 4.8]
 [5.  5.  5.  5. ]]

결과를 보면 xa는 a의 값들이 행 방향으로 반복된 (6×4) 행렬이고, xb는 b의 값들이 열 방향으로 반복된 (6×4) 행렬입니다. 즉, 두 행렬에서 같은 위치의 원소끼리 짝지으면 격자 위의 모든 (x, y) 좌표 쌍을 얻을 수 있습니다.

meshgrid의 대표적인 활용 분야

  • 함수 시각화 − matplotlib의 plot_surface(), contour() 등으로 3D 곡면이나 등고선 그래프를 그릴 때 필수적으로 사용됩니다.

  • 격자 기반 연산 − 격자의 모든 좌표점에서 수학 함수를 한 번에 평가할 수 있습니다.

  • 벡터장 표현 − quiver()로 화살표 그래프를 그려 벡터장을 시각화할 때 유용합니다.

마무리

numpy.meshgrid()는 좌표 벡터를 조합해 좌표 행렬을 손쉽게 만들어 주는 강력한 도구입니다. sparse와 copy 같은 옵션을 상황에 맞게 활용하면 메모리 효율성까지 높일 수 있으니, 데이터 시각화나 과학·공학 계산 작업에서 적극적으로 활용해 보시기 바랍니다.