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')
创建这些矩形网格对许多任务都很有用。在你的文章中提供的例子中,它只是一种在x和y的值范围内采样函数(sin(x**2 + y**2) / (x**2 + y**2))的方法。
由于该函数已在矩形网格上进行采样,因此现在可以将该函数可视化为“图像”。
此外,结果现在可以传递给函数,期望数据在矩形网格(即轮廓)