我在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://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html
我既没有得到正确的值,也没有得到我期望的维度。谁能给我一个提示?
答案 0 :(得分:2)
您正在将“指数”和“点数”中的值混合在一起,因此渐变会给您错误的结果。这是使用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函数感兴趣,它给出了沿给定轴的离散差异。