关于numpy的gradient方法,在参数edge_order等于2时,如何得到左右两个边界值,是比较难理解的地方,而网上的博文几乎都千篇一律,都没有对此做出正确的解释。
而关注我的老粉「高新区运气王」经过深思熟虑,找出规律,总结出edge_order等于2时左右两个边界值的推导,难能可贵!在此以飨关注我的读者。
1 Numpy求梯度
import numpy as np
x = np.random.randint(10, size=(6, ))
f = x**2
print(f"f:{f}")
# >> 0, 1, 4, 9, 16
grad1 = np.gradient(f)
print(f"不设置edge_order时, f的默认梯度:{grad1}")
grad2 = np.gradient(f, edge_order=1)
print(f"edge_order=1时,f的梯度:{grad2}")
print(f"查看f的默认梯度是否和edge_order=1时的梯度值相等:{(grad1==grad2).all()}")
grad3 = np.gradient(f, edge_order=2)
print(f"edge_order=2时, f的梯度:{grad3}")
输出结果如下:
f:[49 36 36 9 4 49]
不设置edge_order时, f的默认梯度:[-13. -6.5 -13.5 -16. 20. 45. ]
edge_order=1时,f的梯度:[-13. -6