numpy.diff 的输出是错误的

Output of numpy.diff is wrong

这是我的问题: 我正在尝试使用 numpy 来计算(数值)导数,但我发现函数 numpy.diff returns(以及 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 正在做的一些规范化有关吗?或者也许我只是在没有注意到的情况下遗漏了一些重要的东西? 感谢帮助

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