繁体   English   中英

在3D中计算梯度

[英]Calculating gradient in 3D

我在3d空间中有以下一组点,D'喜欢到处计算梯度,即返回一个矢量场。

points = []
for i in np.linspace(-20,20,100):   
    for j in np.linspace(-20,20,100):
        points.append([i,j,i**2+j**2])
points = np.array(points)

这是一个椭圆形的抛物面。

使用np.gradient(points)http: np.gradient(points)

我既没有得到正确的价值,也没有得到我期望的维度。 任何人都可以给我一个提示吗?

您将“指数”和“点数”中的值混合在一起,因此渐变会给出错误的结果。 这是用numpy构造点并计算渐变的更好方法:

x, y = np.mgrid[-20:20:100j, -20:20:100j]
z = x**2 + y**2
grad = np.gradient(z)

得到的梯度是具有两个阵列的元组,一个用于第一方向上的梯度,另一个用于第二方向上的梯度。 请注意,此渐变不考虑点之间的分隔(即delta x和delta y),因此要获得导数,您需要除以它:

deriv = grad/(40./100.)

如果你想像以前一样重建你的'积分',你只需要做:

points = np.array([x.ravel(), y.ravel(), z.ravel()]).T

您可能还对numpy的diff函数感兴趣,它会给出沿给定轴的离散差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM