如何迭代 MeshGrid?

tha*_*ddy 3 python iteration numpy

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

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

我怎样才能做到这一点?

swa*_*198 5

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

首先,定义密度函数。为了简单起见,我采用函数|x| + |y|.

def density(x, y):
    return np.abs(x) + np.abs(y)
Run Code Online (Sandbox Code Playgroud)

现在让我们定义沿线的点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)
Run Code Online (Sandbox Code Playgroud)

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

xx, yy = np.meshgrid(x, y)
D = density(xx, yy)
Run Code Online (Sandbox Code Playgroud)

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

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

plt.pcolormesh(x, y, D)
plt.title('Density function = |x| + |y|')
plt.savefig('density.png')
Run Code Online (Sandbox Code Playgroud)

输出是:

在此输入图像描述

  • 提示:如果您的函数不接受数组参数,请尝试“np.vectorize”,如下例所示。 (2认同)