非均匀间距的Numpy梯度

非均匀间距的Numpy梯度,numpy,gradient,Numpy,Gradient,我有点不对劲: import numpy as np import matplotlib.pyplot as plt x = np.concatenate((np.linspace(0,1,100),np.linspace(1,2,50))); f = np.power(x,2); df = 2*x; Df = np.gradient(f,x); plt.plot(x,df,'r', x,Df,'b');plt.show() 这就是我得到的: 否则,如果使用线性间隔数组而不使用参数x,

我有点不对劲:

import numpy as np
import matplotlib.pyplot as plt

x  = np.concatenate((np.linspace(0,1,100),np.linspace(1,2,50)));
f  = np.power(x,2);
df = 2*x;
Df = np.gradient(f,x);
plt.plot(x,df,'r', x,Df,'b');plt.show()
这就是我得到的:

否则,如果使用线性间隔数组而不使用参数x,则一切正常


有什么建议吗

我认为这是因为1.13之前的numpy版本希望“x”参数是恒定的网格间距(请参阅)。尽管早期版本期望标量dx,但它们不检查这一点,结果是np.gradient(f)/x,这是一个有效的除法。这很烦人,因为为numpy 1.13编写的代码可能在早期版本上运行,但输出不正确且没有错误。

所需的输出是什么?我希望红色和蓝色是相同的。红色是f的实际分析导数,不能再现这个问题。渐变与我的安装相匹配,并且是正确的。你的matplotlib版本是什么?谢谢你的尝试。你用我提供的代码得到正确的图了吗?我会检查我的当前版本是的。情节看起来和预期的一样。在matplotlib 2.0.2上测试。