Python 具有numpy.gradient的非均匀间距
我不确定在使用numpy.gradient时如何指定非均匀间距 下面是一些y=x**2的示例代码Python 具有numpy.gradient的非均匀间距,python,numpy,derivative,differentiation,Python,Numpy,Derivative,Differentiation,我不确定在使用numpy.gradient时如何指定非均匀间距 下面是一些y=x**2的示例代码 import numpy as np import matplotlib.pyplot as plt x = [0.0, 2.0, 4.0, 8.0, 16.0] y = [0.0, 4.0, 16.0, 64.0, 256.0] dydx = [0.0, 4.0, 8.0, 16.0, 32.0] # analytical solution spacing = [0.0, 2.0, 2.0,
import numpy as np
import matplotlib.pyplot as plt
x = [0.0, 2.0, 4.0, 8.0, 16.0]
y = [0.0, 4.0, 16.0, 64.0, 256.0]
dydx = [0.0, 4.0, 8.0, 16.0, 32.0] # analytical solution
spacing = [0.0, 2.0, 2.0, 4.0, 8.0] #added a zero at the start to get length matching up with y
m = np.gradient(y, spacing)
plt.plot(x, y, 'bo',
x, dydx, 'r-', #analytical solution
x, m, 'ro') #calculated solution
plt.show()
间距数组的长度总是比我要计算的梯度数组的长度小一倍。添加一个零以获得匹配的长度(如上面的示例代码中所示)会给出错误的答案,一个点的梯度为无穷大
我无法理解/遵循numpy.gradient文档中的非均匀间距()
我应该如何指定点之间的间距?有没有其他方法可以做到这一点
Numpy版本1.9.2函数的API非常混乱。对于间距不均匀的采样点,采用点的坐标,而不是间距: varargs:标量或数组列表,可选 f值之间的间距。所有标注的默认单位间距。可以使用以下命令指定间距:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(10)
x.sort()
y = x**2
dydx = 2*x
dydx_grad = np.gradient(y, x)
plt.plot(x, dydx, 'k-', label='analytical solution')
plt.plot(x, dydx_grad, 'ro', label='calculated solution')
plt.legend(); plt.xlabel('x'); plt.ylabel('dy / dx'); plt.show();
这仍然给了我不正确的梯度,即使我增加了点数。我想知道这是否是我这边的问题。按照他们的例子,我无法得到与numpy.gradient文档相同的答案。当我把相同的f和x值放进去时,得到的是[inf,1.5,1.67,1,1.125,0.83],而不是它们的非均匀间距答案[1,3,3.5,6.7,6.9,2.5])。我会继续玩这个,看看我是否能让它工作。谢谢。我的numpy版本已经过时了。其他人也有类似的问题()。我对它进行了更新,现在它可以正常工作了。在windows上,这是pip安装--升级numpy