有人可以告诉我Numpy中meshgrid函数的作用是什么?我知道它会创建某种坐标网格以进行绘图,但是我真的看不到它的直接好处。

我正在研究Sebastian Raschka的“Python机器学习”,他正在使用它来绘制决策边界。参见输入11 here

我也在官方文档中尝试过此代码,但是,再次,输出对我而言真的没有任何意义。

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之间的整数值处都有一个点。要创建矩形网格,我们需要xy点的每种组合。

这将是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

这将导致以下xy矩阵,从而每个矩阵中相应元素的配对将给出网格中某个点的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')

python - Python/NumPy中的meshgrid的用途是什么?-LMLPHP

显然,这非常繁琐,尤其是对于大范围的xy。相反,meshgrid实际上可以为我们生成此代码:我们只需指定唯一的xy值即可。
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')

python - Python/NumPy中的meshgrid的用途是什么?-LMLPHP

这些矩形网格的创建对于许多任务很有用。在您的帖子中提供的示例中,这只是在sin(x**2 + y**2) / (x**2 + y**2)x的一系列值上采样函数(y)的简单方法。

由于此功能已在矩形网格上采样,因此该功能现在可以可视化为“图像”。

python - Python/NumPy中的meshgrid的用途是什么?-LMLPHP

另外,现在可以将结果传递给期望在矩形网格上有数据的函数(即contourf)

10-05 19:45