Python / NumPy中meshgrid的目的是什么?

新手上路,请多包涵

有人可以向我解释 meshgrid Numpy 中的函数的目的是什么吗?我知道它为绘图创建了某种坐标网格,但我看不到它的直接好处。

我正在学习 Sebastian Raschka 的“Python 机器学习”,他正在使用它来绘制决策边界。请参见 此处 的输入 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)

如果可能的话,请给我展示很多真实世界的例子。

原文由 HonzaB 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 870
2 个回答

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')

在此处输入图像描述

显然,这变得非常乏味,特别是对于大范围的 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')

在此处输入图像描述

创建这些矩形网格对许多任务很有用。在您在帖子中提供的示例中,这只是一种在 xy 的值范围内对函数( sin(x**2 + y**2) / (x**2 + y**2) )进行采样的方法.

因为这个函数是在一个矩形网格上采样的,所以现在可以将这个函数可视化为一个“图像”。

在此处输入图像描述

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

原文由 Suever 发布,翻译遵循 CC BY-SA 4.0 许可协议

由 Microsoft Excel 提供:

在此处输入图像描述

原文由 Sarsaparilla 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题