누군가 meshgrid
Numpy에서 기능 의 목적이 무엇인지 설명해 줄 수 있습니까 ? 나는 그것이 플로팅을 위해 일종의 좌표 그리드를 생성한다는 것을 알고 있지만, 그것의 직접적인 이점을 실제로 볼 수는 없습니다.
저는 Sebastian Raschka에서 “Python Machine Learning”을 공부하고 있으며 의사 결정 경계를 그리는 데 사용하고 있습니다. 여기에 입력 11을 참조 하십시오 .
나는 또한 공식 문서 에서이 코드를 시도했지만 다시 출력이 이해가되지 않습니다.
x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)
가능하다면 실제 사례도 많이 보여주세요.
답변
meshgrid
x 값의 배열과 y 값의 배열로 직사각형 격자를 만드는 것이 목적입니다 .
예를 들어, x와 y 방향에서 0과 4 사이의 각 정수 값에 점이있는 그리드를 만들려면 사각형 격자를 만들려면, 우리는 모든 조합이 필요 x
하고 y
포인트를.
이것은 25 점입니다. 따라서 이러한 모든 점에 대해 x 및 y 배열을 만들려면 다음을 수행 할 수 있습니다.
x[0,0] = 0 y[0,0] = 0
x[0,1] = 1 y[0,1] = 0
x[0,2] = 2 y[0,2] = 0
x[0,3] = 3 y[0,3] = 0
x[0,4] = 4 y[0,4] = 0
x[1,0] = 0 y[1,0] = 1
x[1,1] = 1 y[1,1] = 1
...
x[4,3] = 3 y[4,3] = 4
x[4,4] = 4 y[4,4] = 4
결과적으로 다음 x
과 y
행렬이 생겨 각 행렬의 해당 요소가 쌍을 이루어 그리드에있는 점의 x 및 y 좌표가 제공됩니다.
x = 0 1 2 3 4 y = 0 0 0 0 0
0 1 2 3 4 1 1 1 1 1
0 1 2 3 4 2 2 2 2 2
0 1 2 3 4 3 3 3 3 3
0 1 2 3 4 4 4 4 4 4
그런 다음 그리드인지 확인하기 위해 플롯 할 수 있습니다.
plt.plot(x,y, marker='.', color='k', linestyle='none')
분명히 이것은 특히 넓은 범위의 x
및에 대해 매우 지루 y
합니다. 대신, meshgrid
실제로 우리를 위해이를 생성 할 수 있습니다 : 우리가 지정하는 모든는 고유 x
하고 y
값을.
xvalues = np.array([0, 1, 2, 3, 4]);
yvalues = np.array([0, 1, 2, 3, 4]);
이제을 호출 meshgrid
하면 이전 출력이 자동으로 나타납니다.
xx, yy = np.meshgrid(xvalues, yvalues)
plt.plot(xx, yy, marker='.', color='k', linestyle='none')
이 직사각형 그리드를 생성하면 많은 작업에 유용합니다. 게시물에 제공 한 예에서는 및에 sin(x**2 + y**2) / (x**2 + y**2)
대한 값 범위 에서 함수 ( ) 를 샘플링하는 방법 입니다.x
y
이 함수는 사각형 격자에서 샘플링되었으므로 이제 함수를 “이미지”로 시각화 할 수 있습니다.
또한, 결과는 이제 직사각형 그리드에 데이터를 기대하는 기능 (예에 전달 될 수 있습니다 contourf
)
답변
답변
실제로 그 목적은 np.meshgrid
문서에 이미 언급되어 있습니다.
좌표 벡터에서 좌표 행렬을 반환합니다.
1 차원 좌표 배열 x1, x2, …, xn이 주어지면 ND 그리드에서 ND 스칼라 / 벡터 필드의 벡터화 된 평가를 위해 ND 좌표 배열을 만듭니다.
따라서 기본 목적은 좌표 행렬을 만드는 것입니다.
당신은 아마 자신에게 물었다 :
좌표 행렬을 만들어야하는 이유는 무엇입니까?
Python / NumPy를 사용하여 좌표 행렬이 필요한 이유는 좌표가 0으로 시작하고 순수한 양의 정수인 경우를 제외하고는 좌표에서 값으로의 직접적인 관계가 없기 때문입니다. 그런 다음 배열의 인덱스를 인덱스로 사용할 수 있습니다. 그러나 그렇지 않은 경우 데이터와 함께 좌표를 저장해야합니다. 그것이 그리드가 들어오는 곳입니다.
데이터가 다음과 같다고 가정하십시오.
1 2 1
2 5 2
1 2 1
그러나 각 값은 가로 2km, 세로 3km를 나타냅니다. 원점이 왼쪽 상단이고 사용 가능한 거리를 나타내는 배열을 원한다고 가정하십시오.
import numpy as np
h, v = np.meshgrid(np.arange(3)*3, np.arange(3)*2)
여기서 v는
array([[0, 0, 0],
[2, 2, 2],
[4, 4, 4]])
그리고 h :
array([[0, 3, 6],
[0, 3, 6],
[0, 3, 6]])
두 개의 인덱스가있는 경우 자, 가정 해 봅시다 x
과 y
(의 반환 값이 왜의 것을 meshgrid
일반적으로 xx
또는 xs
대신 x
내가 선택한이 경우 h
다음의 x는 점의 좌표를 얻을 수있는 수평 위해이!)는 y는 점과 좌표 다음을 사용하여 해당 시점의 가치 :
h[x, y] # horizontal coordinate
v[x, y] # vertical coordinate
data[x, y] # value
즉, 훨씬 쉽게 좌표를 추적 유지할 수 와 당신이 필요 좌표를 알고 있다는 기능에 전달할 수 있습니다 (더 중요한).
조금 더 긴 설명
그러나 np.meshgrid
자체가 종종 직접 사용되지 않으며, 대부분의 사람은 단지 중 하나를 사용 유사한 물체 np.mgrid
또는 np.ogrid
. 여기 np.mgrid
대표 sparse=False
와 경우 (필자는 참조 의 인수 ). 주 사이에 상당한 차이가 있음
과 과 : 처음 두 리턴 값 (이 둘 또는 이상의 경우) 반전된다. 이것은 중요하지 않지만 상황에 따라 의미있는 변수 이름을 제공해야합니다.np.ogrid
sparse=True
sparse
np.meshgrid
np.meshgrid
np.ogrid
np.mgrid
예를 들어, 2 차원 격자의 경우와 matplotlib.pyplot.imshow
는 첫 번째 반환 항목의 이름을 의미가 np.meshgrid
x
두 번째 하나를 y
그것을위한 다른 방법으로 주위 동안 np.mgrid
하고 np.ogrid
.
np.ogrid
희소 그리드
>>> import numpy as np
>>> yy, xx = np.ogrid[-5:6, -5:6]
>>> xx
array([[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]])
>>> yy
array([[-5],
[-4],
[-3],
[-2],
[-1],
[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5]])
이미에 비해 출력이 반전 말했듯이 np.meshgrid
나는 등을 풀었 그 이유는, yy, xx
대신 xx, yy
:
>>> xx, yy = np.meshgrid(np.arange(-5, 6), np.arange(-5, 6), sparse=True)
>>> xx
array([[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]])
>>> yy
array([[-5],
[-4],
[-3],
[-2],
[-1],
[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5]])
이것은 이미 좌표, 특히 2D 플롯의 x 및 y 선처럼 보입니다.
시각화 :
yy, xx = np.ogrid[-5:6, -5:6]
plt.figure()
plt.title('ogrid (sparse meshgrid)')
plt.grid()
plt.xticks(xx.ravel())
plt.yticks(yy.ravel())
plt.scatter(xx, np.zeros_like(xx), color="blue", marker="*")
plt.scatter(np.zeros_like(yy), yy, color="red", marker="x")
np.mgrid
고밀도 그리드
>>> yy, xx = np.mgrid[-5:6, -5:6]
>>> xx
array([[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]])
>>> yy
array([[-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5],
[-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4],
[-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3],
[-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2],
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
[ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
[ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]])
여기에도 동일하게 적용됩니다 np.meshgrid
.
>>> xx, yy = np.meshgrid(np.arange(-5, 6), np.arange(-5, 6))
>>> xx
array([[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]])
>>> yy
array([[-5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5],
[-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4],
[-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3],
[-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2],
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
[ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
[ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
[ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]])
달리 ogrid
이 어레이에 포함 모두 xx
와 yy
좌표 -5 <= XX <= 5; -5 <= yy <= 5 그리드.
yy, xx = np.mgrid[-5:6, -5:6]
plt.figure()
plt.title('mgrid (dense meshgrid)')
plt.grid()
plt.xticks(xx[0])
plt.yticks(yy[:, 0])
plt.scatter(xx, yy, color="red", marker="x")
기능성
이 함수는 2D에만 국한되지 않고 임의의 차원에서 작동합니다 (파이썬에서 함수에 부여되는 최대 인수 수와 NumPy가 허용하는 최대 수)가 있습니다.
>>> x1, x2, x3, x4 = np.ogrid[:3, 1:4, 2:5, 3:6]
>>> for i, x in enumerate([x1, x2, x3, x4]):
... print('x{}'.format(i+1))
... print(repr(x))
x1
array([[[[0]]],
[[[1]]],
[[[2]]]])
x2
array([[[[1]],
[[2]],
[[3]]]])
x3
array([[[[2],
[3],
[4]]]])
x4
array([[[[3, 4, 5]]]])
>>> # equivalent meshgrid output, note how the first two arguments are reversed and the unpacking
>>> x2, x1, x3, x4 = np.meshgrid(np.arange(1,4), np.arange(3), np.arange(2, 5), np.arange(3, 6), sparse=True)
>>> for i, x in enumerate([x1, x2, x3, x4]):
... print('x{}'.format(i+1))
... print(repr(x))
# Identical output so it's omitted here.
이것들이 1D에서도 작동하더라도 두 가지 (보다 일반적인) 1D 그리드 생성 기능이 있습니다.
게다가 start
및 stop
인수 그것은 또한 지원 step
인수 (단계의 수를 나타냅니다 복잡한 단계) :
>>> x1, x2 = np.mgrid[1:10:2, 1:10:4j]
>>> x1 # The dimension with the explicit step width of 2
array([[1., 1., 1., 1.],
[3., 3., 3., 3.],
[5., 5., 5., 5.],
[7., 7., 7., 7.],
[9., 9., 9., 9.]])
>>> x2 # The dimension with the "number of steps"
array([[ 1., 4., 7., 10.],
[ 1., 4., 7., 10.],
[ 1., 4., 7., 10.],
[ 1., 4., 7., 10.],
[ 1., 4., 7., 10.]])
응용
목적에 대해 구체적으로 물었고 실제로 이러한 그리드는 좌표계가 필요한 경우 매우 유용합니다.
예를 들어 거리를 2 차원으로 계산하는 NumPy 함수가있는 경우 :
def distance_2d(x_point, y_point, x, y):
return np.hypot(x-x_point, y-y_point)
그리고 각 점의 거리를 알고 싶습니다.
>>> ys, xs = np.ogrid[-5:5, -5:5]
>>> distances = distance_2d(1, 2, xs, ys) # distance to point (1, 2)
>>> distances
array([[9.21954446, 8.60232527, 8.06225775, 7.61577311, 7.28010989,
7.07106781, 7. , 7.07106781, 7.28010989, 7.61577311],
[8.48528137, 7.81024968, 7.21110255, 6.70820393, 6.32455532,
6.08276253, 6. , 6.08276253, 6.32455532, 6.70820393],
[7.81024968, 7.07106781, 6.40312424, 5.83095189, 5.38516481,
5.09901951, 5. , 5.09901951, 5.38516481, 5.83095189],
[7.21110255, 6.40312424, 5.65685425, 5. , 4.47213595,
4.12310563, 4. , 4.12310563, 4.47213595, 5. ],
[6.70820393, 5.83095189, 5. , 4.24264069, 3.60555128,
3.16227766, 3. , 3.16227766, 3.60555128, 4.24264069],
[6.32455532, 5.38516481, 4.47213595, 3.60555128, 2.82842712,
2.23606798, 2. , 2.23606798, 2.82842712, 3.60555128],
[6.08276253, 5.09901951, 4.12310563, 3.16227766, 2.23606798,
1.41421356, 1. , 1.41421356, 2.23606798, 3.16227766],
[6. , 5. , 4. , 3. , 2. ,
1. , 0. , 1. , 2. , 3. ],
[6.08276253, 5.09901951, 4.12310563, 3.16227766, 2.23606798,
1.41421356, 1. , 1.41421356, 2.23606798, 3.16227766],
[6.32455532, 5.38516481, 4.47213595, 3.60555128, 2.82842712,
2.23606798, 2. , 2.23606798, 2.82842712, 3.60555128]])
개방형 그리드 대신 고밀도 그리드를 통과 한 경우 출력이 동일합니다. NumPys 방송이 가능합니다!
결과를 시각화하자 :
plt.figure()
plt.title('distance to point (1, 2)')
plt.imshow(distances, origin='lower', interpolation="none")
plt.xticks(np.arange(xs.shape[1]), xs.ravel()) # need to set the ticks manually
plt.yticks(np.arange(ys.shape[0]), ys.ravel())
plt.colorbar()
그리고 이것은 NumPys 경우도 mgrid
그리고 ogrid
그것은 당신이 쉽게 그리드의 해상도를 변경할 수 있기 때문에 매우 편리하게 :
ys, xs = np.ogrid[-5:5:200j, -5:5:200j]
# otherwise same code as above
그러나 imshow
지원 x
및 y
입력을 지원하지 않으므로 틱을 수동으로 변경해야합니다. x
와 y
좌표를 받아들이면 정말 편리 할까요?
그리드를 자연스럽게 처리하는 NumPy로 함수를 쉽게 작성할 수 있습니다. 또한 NumPy, SciPy, matplotlib에는 그리드를 전달할 것으로 예상되는 몇 가지 기능이 있습니다.
나는 이미지를 좋아하므로 탐험 해 보자 matplotlib.pyplot.contour
.
ys, xs = np.mgrid[-5:5:200j, -5:5:200j]
density = np.sin(ys)-np.cos(xs)
plt.figure()
plt.contour(xs, ys, density)
좌표가 이미 올바르게 설정되어 있는지 확인하십시오! 방금 전달한 경우에는 그렇지 않습니다 density
.
또는 사용하여 다른 재미있는 예를 제공하기 위해 astropy 모델을 (내가 좌표에 대해 많은 관심 없어이 시간, 난 그냥 생성하는 데 사용할 일부 그리드) :
from astropy.modeling import models
z = np.zeros((100, 100))
y, x = np.mgrid[0:100, 0:100]
for _ in range(10):
g2d = models.Gaussian2D(amplitude=100,
x_mean=np.random.randint(0, 100),
y_mean=np.random.randint(0, 100),
x_stddev=3,
y_stddev=3)
z += g2d(x, y)
a2d = models.AiryDisk2D(amplitude=70,
x_0=np.random.randint(0, 100),
y_0=np.random.randint(0, 100),
radius=5)
z += a2d(x, y)
그건 그냥 기능 모델 관련 및 피팅 여러 가지 기능 “외모에 대해”비록 (예를 들어 scipy.interpolate.interp2d
,
scipy.interpolate.griddata
심지어 사용 예를 보여 np.mgrid
등 Scipy에) 그리드를 필요로한다. 이들 중 대부분은 개방형 그리드 및 고밀도 그리드에서 작동하지만 일부는 이들 중 하나에서만 작동합니다.
답변
함수가 있다고 가정하십시오.
def sinus2d(x, y):
return np.sin(x) + np.sin(y)
예를 들어 0에서 2 * pi 범위의 모양을 확인하려고합니다. 어떻게 하시겠습니까? 있습니다 np.meshgrid
:
xx, yy = np.meshgrid(np.linspace(0,2*np.pi,100), np.linspace(0,2*np.pi,100))
z = sinus2d(xx, yy) # Create the image on this grid
그런 음모는 다음과 같습니다.
import matplotlib.pyplot as plt
plt.imshow(z, origin='lower', interpolation='none')
plt.show()
그래서 np.meshgrid
그냥 편리합니다. 원칙적으로 다음을 수행 할 수 있습니다.
z2 = sinus2d(np.linspace(0,2*np.pi,100)[:,None], np.linspace(0,2*np.pi,100)[None,:])
그러나 당신은 당신의 차원 (두 개 이상이 있다고 가정)과 올바른 방송을 알고 있어야합니다. np.meshgrid
이 모든 것이 당신을 위해합니다.
또한 예를 들어 보간을 원하지만 특정 값을 제외하려는 경우 meshgrid를 사용하면 데이터와 함께 좌표를 삭제할 수 있습니다.
condition = z>0.6
z_new = z[condition] # This will make your array 1D
이제 보간을 어떻게 하시겠습니까? 다음 x
과 y
같이 보간 함수를 제공 하고 scipy.interpolate.interp2d
삭제할 수 있으므로 어떤 좌표가 삭제되었는지 알 수있는 방법이 필요합니다.
x_new = xx[condition]
y_new = yy[condition]
그런 다음 “올바른”좌표로 보간 할 수 있습니다 (meshgrid없이 시도하면 추가 코드가 많이 있습니다).
from scipy.interpolate import interp2d
interpolated = interp2d(x_new, y_new, z_new)
원본 메쉬 그리드를 사용하면 원래 그리드에서 보간을 다시 얻을 수 있습니다.
interpolated_grid = interpolated(xx[0], yy[:, 0]).reshape(xx.shape)
이것들은 내가 meshgrid
더 많이 사용할 수있는 몇 가지 예 입니다.
답변
meshgrid는 두 배열에서 모든 점 쌍의 두 개의 1 차원 배열에서 직사각형 격자를 만드는 데 도움이됩니다.
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3, 4])
이제 함수 f (x, y)를 정의하고 배열 ‘x’와 ‘y’의 가능한 모든 포인트 조합에이 함수를 적용하려면 다음을 수행하십시오.
f(*np.meshgrid(x, y))
함수가 두 요소의 곱을 생성하는 경우 대형 배열에 대해 직교 곱을 효율적으로 얻을 수있는 방법입니다.
여기 에서 추천
답변
기본 아이디어
주어 가능한 X 값은 xs
, 가능한 한 Y 값 (ㄱ 그래프의 X 축에 틱 부호로 생각) ys
, meshgrid
유사 (x, y)의 격자 점 —의 대응 세트를 생성한다 set((x, y) for x in xs for y in yx)
. 예를 들어 if xs=[1,2,3]
와 ys=[4,5,6]
이면 좌표 세트를 얻습니다.{(1,4), (2,4), (3,4), (1,5), (2,5), (3,5), (1,6), (2,6), (3,6)}
됩니다.
반환 값의 형태
그러나 meshgrid
반환하는 표현은 두 가지면에서 위의 표현과 다릅니다.
우선 , meshgrid
2 차원 배열의 격자 점을 낳는다 : 행 상이한 y 값에 대응하는, 칼럼과 — 다른 x 값에 대응하는 list(list((x, y) for x in xs) for y in ys)
다음의 배열을 제공하는 것이다 :
[[(1,4), (2,4), (3,4)],
[(1,5), (2,5), (3,5)],
[(1,6), (2,6), (3,6)]]
Second , meshgrid
x 및 y 좌표를 별도로 반환합니다 (예 : 두 개의 다른 numpy 2d 배열).
xcoords, ycoords = (
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]]),
array([[4, 4, 4],
[5, 5, 5],
[6, 6, 6]]))
# same thing using np.meshgrid:
xcoords, ycoords = np.meshgrid([1,2,3], [4,5,6])
# same thing without meshgrid:
xcoords = np.array([xs] * len(ys)
ycoords = np.array([ys] * len(xs)).T
참고 np.meshgrid
또한 더 높은 차원의 격자를 생성 할 수있다. xs, ys 및 zs가 주어지면 xcoords, ycoords, zcoords를 3d 배열로 되돌릴 수 있습니다. meshgrid
또한 차원의 역순 정렬과 결과의 희소 한 표현을 지원합니다.
응용
왜 이런 형태의 출력을 원할까요?
그리드의 모든 지점에 함수를 적용하십시오.
한 가지 동기는 (+,-, *, /, **)와 같은 이진 연산자가 요소 배열 연산으로 numpy 배열에 대해 오버로드되는 것입니다. 이 수단이 내가하는 기능이있는 경우 def f(x, y): return (x - y) ** 2
두 개의 스칼라의 작품, 나는 또한 elementwise 결과의 배열을 가져 오는 두 NumPy와 배열에 적용 할 수 있음 : 예를 f(xcoords, ycoords)
하거나 f(*np.meshgrid(xs, ys))
하여 위의 예에서 다음 제공을 :
array([[ 9, 4, 1],
[16, 9, 4],
[25, 16, 9]])
더 높은 차원의 외부 제품 : 이것이 얼마나 효율적인지 잘 모르겠지만 다음과 같은 방법으로 높은 차원의 외부 제품을 얻을 수 있습니다 np.prod(np.meshgrid([1,2,3], [1,2], [1,2,3,4]), axis=0)
.
matplotlib의 등고선 플롯 : 결정 경계 를 플롯하기 위해 matplotlib 로 도면 등고선 플롯을meshgrid
조사 할 때 나타 났습니다 . 이를 위해을 사용하여 그리드를 생성하고 각 그리드 포인트에서 함수를 평가 한 다음 (예 : 위 그림 참조) xcoords, ycoords 및 계산 된 f- 값 (예 : zcoords)을 contourf 함수에 전달합니다.meshgrid