这是我的问题: 我试图使用numpy计算(数值)导数,但我发现函数numpy.diff返回的值有一些问题(和numpy.gradient一样)。我发现价值观是完全错误的! 这是代码示例:
import numpy as np
x = np.linspace(-5, 5, 1000)
y = x**2
yDiff = np.diff(y)
print y[0], yDiff[0]
此脚本的输出为:
25.0 -0.0999998997997
第一个值是正确的,第二个值恰好比应该的那个小100倍(考虑近似值)! 我做了不同的尝试,这不是一个与功能边界相关的问题,而这100个因素似乎是系统性的...... 这可能与np.diff正在做的一些规范化有关吗?或许我只是在没有注意到的情况下错过了一些重要的事 谢谢你的帮助
答案 0 :(得分:4)
np.diff
没有计算它只是计算有限差分的导数;你必须自己考虑间距。尝试
np.diff(y) / (x[1] - x[0])
顺便说一下,np.linspace
有一个retstep
关键字,在这种情况下很方便:
x, dx = np.linspace(-5, 5, 100, retstep=True)
...
np.diff(y) / dx