numpy - python 从meshgrid数据生成数据( Numpy )

  显示原文与译文双语对照的内容

我想问一下如何从meshgrid生成相应的值。 我有一个函数"foo",它需要一个 1D array,它的长度为 2,并返回一些实数。


import numpy as np



def foo(X): 


 #this function takes a vector, e.g., np.array([2,3]), and returns a real number.


 return sum(X)**np.sin( sum(X) );



x = np.arange(-2, 1, 1) # points in the x axis


y = np.arange( 3, 8, 1) # points in the y axis


X, Y = np.meshgrid(x, y) # X, Y : grid



我使用meshgrid生成X 和Y 网格。

如何使用"foo"函数生成相应的Z 值,以便在0.使用X 。Y 。Z 值的plot_surface函数中对它们进行 plot 化?

这里的问题是如何使用"foo"函数生成与X 和Y 形状相同的Z 值。 因为我的"foo"函数只需要 1D 个 array,所以我不知道如何使用X 和Y 来生成相应的Z 值。

时间: 原作者:

使用 np.dstack 在"深度"中堆叠两个numpy数组,然后修改 foo 函数,使它只能在堆栈的最后一个轴上操作。 使用参数 axis=-1 ( 而不是使用内置 sum ),可以轻松地使用 np.sum 完成这里操作:


import numpy as np



def foo(xy):


 return np.sum(xy, axis=-1) ** np.sin(np.sum(xy, axis=-1))



x = np.arange(-2, 1, 1) # points in the x axis


y = np.arange( 3, 8, 1) # points in the y axis


X, Y = np.meshgrid(x, y) # X, Y : grid


XY = np.dstack((X, Y))



现在,你应该得到:


>>> XY.shape


(5, 3, 2)


>>> foo(XY)


array([[ 1., 1.87813065, 1.1677002 ],


 [ 1.87813065, 1.1677002, 0.35023496],


 [ 1.1677002, 0.35023496, 0.2136686 ],


 [ 0.35023496, 0.2136686, 0.60613935],


 [ 0.2136686, 0.60613935, 3.59102217]])



如果你想要获得相同的效果,但没有使用修改 foo,那么你可以使用 np.apply_along_axis,这应该是你所需要的。


>>> np.apply_along_axis(foo, -1, XY)


array([[ 1., 1.87813065, 1.1677002 ],


 [ 1.87813065, 1.1677002, 0.35023496],


 [ 1.1677002, 0.35023496, 0.2136686 ],


 [ 0.35023496, 0.2136686, 0.60613935],


 [ 0.2136686, 0.60613935, 3.59102217]])



原作者:
...