격자 점을 이해하고 등고선으로 재생합니다.

안녕하세요.
meshgrid는 혼란 스럽습니까?
오늘은 meshgrid를 중심으로 써갑니다.
그리고 그것을 이용한 등고선을 쓰는 방법인 contour에서 놀자고 생각합니다.

meshgrid란?



meshgrid는 격자 점을 만드는 데 사용됩니다.

격자점이란?



좌표평면상에 있는 점에서 x좌표, y좌표 모두 정수인 점을 격자점이라고 한다.


즉,이 이미지의 모든 점입니다.

자, 코드를 씁니다.
import numpy as np
x = [0, 1, 2, 3]
y = [0, 1, 2, 3]

X, Y = np.meshgrid(x, y)

X와 Y는 다음과 같습니다.

뭐 이거~~~~~~~~~~~?!?!?!?!?!?!?!
이것이 무엇을 나타내는지를 정리합시다.
첫 번째 좌표 평면과이 행렬이 어떻게 관련되어 있는지 살펴 보겠습니다.
아래 이미지를 참조하십시오.


어때?
조금 핀으로 왔니?
이렇게. X와 Y의 행렬의 위치는 평면상의 좌표와 일치하고 있습니다! (상하는 전치되어 있다)
즉, 행렬의 좌상은 좌표에서는 좌하.
행렬의 오른쪽 하단으로 갈수록 좌표는 오른쪽 상단으로 이동합니다.

이 일치하고 있다는 사실을 알고 있으면, X와 Y의 크기는 (len(y), len(x))가 되는군요.
그리고 len(x) * len(y) = 격자점의 수가 됩니다.
왜?
먼저 종이에 쓰고 천천히 생각해보십시오.

그럼 크기가 다른 x, y를 생각해 보려고 생각합니다.


X에 대해 생각하면, X는 반드시 0 또는 1 밖에 요소로서 가지지 않습니다.
왜냐하면 x라는 배열 안에는 0,1밖에 없으니까요.
그리고 0에서 1까지를 하나의 막대라고 생각하면, y = 0, 100, 200에 3개 겹치지요.
이것은 [0, 1]이 세 줄 필요하다는 것입니다. 그래서 X의 행렬은 3 * 2 = len(y) * len(x)이군요.

Y도 같습니다.

상당히 똑똑한 설명을했지만 한마디로
행렬의 크기는 격자 점의 세로 × 가로와 같습니다.
이렇게 하면 매우 간단하고, 혼란도 막을 수 있네요.
그래도 아름답다.

meshgrid를 이용하여 등고선을 씁니다.


import numpy as np
import matplotlib.pyplot as plt

# z = 2(x + y)
def f(x, y):
    return 2 * (x + y)

x = [-1, 0, 1, 2, 3]
y = [-1, 0, 1, 2, 3]

X, Y = np.meshgrid(x, y)

fig, ax = plt.subplots()
cont = ax.contour(X, Y, f(X, Y), levels=[0, 2, 4]) # ここだけ説明。
cont.clabel(fmt='%1.1f', fontsize=14)
plt.show()


결과는 이렇게 됩니다.
실제로 x = 2, y = -1이면 z = 2(2 - 1) = 2 * 1 = 2군요.

contour만 설명하겠네요.
contour(X, Y, Z=f(X,Y), levels=[0, 2, 4])
우선 contour는 등고선을 구하기 위한 도구입니다.
등고선이란 x, y에서 도출되는 Z의 동일한 값을 묶은 것입니다.
X, Y는 격자점으로, f(X, Y)에서 각각의 격자점에서 Z를 구하고 있습니다.
그 Z에 따라 선을 묶어 가는군요. 각 위치의 Z를 알기 위해 격자 점이 필요합니다.
마지막 레벨은 선택 사항이지만 여기에 지정된 것이 선으로 표시됩니다.

요약



오늘은 meshgrid를 중심으로 썼습니다.
그리고 meshgrid를 사용하는 등고선을 쓰는 도구인 contour에서 놀아 보았습니다.
meshgrid는 여러 곳에서 사용합니다.
확실히 이해하는 것은 돛대일 것입니다.
고마워요.

참고문헌



격자점이란?

좋은 웹페이지 즐겨찾기