你需要给gradient一个矩阵来描述你的(x,y)点的角频率值。e、 gdef f(x,y):
return np.sin((x + y))
x = y = np.arange(-5, 5, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([f(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
gx,gy = np.gradient(Z,0.05,0.05)
可以看到,将Z绘制为曲面会提供:

下面是如何解释你的梯度:
gx是一个矩阵,它在所有点上都给出了变化dz/dx。e、 g.gx[0][0]是dz/dx在(x0,y0处。可视化gx有助于理解:

因为我的数据是从f(x,y) = sin(x+y)gy生成的,所以看起来是一样的。
这里有一个使用f(x,y) = sin(x)的更明显的例子。。。
f(x,y)

和渐变


更新让我们看看xy对。
这是我使用的代码:def f(x,y):
return np.sin(x)
x = y = np.arange(-3,3,.05)
X, Y = np.meshgrid(x, y)
zs = np.array([f(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
xy_pairs = np.array([str(x)+','+str(y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
xy_pairs = xy_pairs.reshape(X.shape)
gy,gx = np.gradient(Z,.05,.05)
现在我们可以看看到底发生了什么。假设我们想知道什么点与Z[20][30]处的值相关?然后。。。>>> Z[20][30]
-0.99749498660405478
关键是>>> xy_pairs[20][30]
'-1.5,-2.0'
对吗?让我们检查一下。>>> np.sin(-1.5)
-0.99749498660405445
是的。
在那一点上我们的梯度成分是什么?>>> gy[20][30]
0.0
>>> gx[20][30]
0.070707731517679617
这些可以结账吗?
dz/dy always 0检查。
dz/dx = cos(x)和。。。>>> np.cos(-1.5)
0.070737201667702906
看起来不错。
你会注意到它们并不完全正确,这是因为我的Z数据不是连续的,有一个步长为0.05,而gradient只能近似于变化率。