具有非均匀间距的 Numpy 渐变
Numpy gradient with non uniform spacing
我遇到了一些问题:
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" 参数是恒定的网格间距(参见 https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.gradient.html#numpy.gradient)。即使早期版本需要标量 dx,它们也不会对此进行检查,结果是 np.gradient(f) / x,这是一个有效的除法。这非常烦人,因为为 numpy 1.13 编写的代码可能 运行 在早期版本上输出不正确且没有错误。
我遇到了一些问题:
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" 参数是恒定的网格间距(参见 https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.gradient.html#numpy.gradient)。即使早期版本需要标量 dx,它们也不会对此进行检查,结果是 np.gradient(f) / x,这是一个有效的除法。这非常烦人,因为为 numpy 1.13 编写的代码可能 运行 在早期版本上输出不正确且没有错误。