meshgrid
的目的是用一个x值数组和一个y值数组创建一个矩形网格.
举个例子,如果我们想要创建一个网格,在x和y方向上,在0到4之间的每个整数值上都有一个点.要创建矩形网格,我们需要x
点和y
点的所有组合.
这将是25个点,对吗?因此,如果我们想要为所有这些点创建一个x和y数组,我们could执行以下操作.
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)
)的方法.
由于该函数已在矩形网格上采样,因此该函数现在可以可视化为"图像".
此外,现在可以将结果传递给需要矩形网格(即contourf
)上的数据的函数