【问题标题】:How can I iterate over a MeshGrid?如何迭代 MeshGrid?
【发布时间】:2021-06-22 00:41:48
【问题描述】:

我有一个函数可以返回点 (x, y) 的密度估计。我想遍历给定二维网格的所有 (x, y) 点,并让密度​​函数计算每个点的估计值,这样我就可以得到一个密度值矩阵,然后我可以绘制它。

假设函数名为density(x, y),它采用任意点 (x, y) 并返回该 (x, y) 的密度估计 (z)。我希望能够将该函数应用于二维网格中的每个点并存储密度估计值,我可以在其中使用plt.pcolormesh() 来查看密度。

我该怎么做?

【问题讨论】:

  • 欢迎来到 StackOverflow。我不清楚你想做什么。听起来你想插入一个函数?也许显示您的“返回密度估计的函数”。我假设你知道for 循环?如果不是插值,也许你想要的是meshgrid 和矢量化?
  • 您好,谢谢您的欢迎。我已经编辑了这个问题,我希望它现在更有意义。我对 StackOverflow 还很陌生,并且仍在尝试掌握提出问题的方式,所以请原谅我的问题中的任何失误。谢谢

标签: python numpy iteration


【解决方案1】:

我想你想要一些类似的东西。

首先,定义一个密度函数。为简单起见,我使用函数|x| + |y|

def density(x, y):
    return np.abs(x) + np.abs(y)

现在让我们沿xy 维度定义点并填充数组。在下面的示例中,xy 是一维数组,它们存储了 n_xn_y 点,每个点在 [-1, 1] 中均匀采样。

n_x = 100
n_y = 100
x = np.linspace(-1, 1, n_x)
y = np.linspace(-1, 1, n_y)

根据点对计算网格并计算网格中每个点的密度D

xx, yy = np.meshgrid(x, y)
D = density(xx, yy)

请注意,您不需要显式迭代网格网格,您也可以对数组xxyy 使用看似标量的density() 函数。有关meshgrid的详细信息,请参阅此page

接下来只需使用pcolormesh() 显示或保存即可。

plt.pcolormesh(x, y, D)
plt.title('Density function = |x| + |y|')
plt.savefig('density.png')

输出是:

【讨论】:

  • 提示:如果您的函数不接受下面示例中的数组参数,请尝试np.vectorize
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 2016-04-09
  • 1970-01-01
  • 2011-12-29
  • 2010-11-02
  • 2012-03-23
  • 2011-05-27
  • 2016-05-24
相关资源
最近更新 更多