[英]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.