grad在python什么模块_用python计算梯度

您需要为渐变提供一个矩阵,该矩阵描述(x,y)点的角频率值.例如

def 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.例如gx [0] [0]是(x0,y0)处的dz / dx.可视化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总是0检查.

dz / dx = cos(x)和…

>>> np.cos(-1.5)

0.070737201667702906

看起来不错.

您会注意到它们并不完全正确,这是因为我的Z数据不连续,步长为0.05,渐变只能接近变化率.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值