要插值数据,我目前使用此功能:
def myinterp(x, y, der = 0, s = 0):
tck = interpolate.splrep(x, y, s = sigma)
xnew = np.arange(x[0], x[-1], (x[-1]-x[0])/x.size)
ynew = interpolate.splev(xnew, tck, der = n)
return xnew, ynew
xnew
等效于x
在带有dx=(x[-1]-x[0])/x.size
的常规网格上重新采样。如何执行同样的操作,但对数刻度上的x
重采样? 最佳答案
您可以采用对数,线性地重新采样,然后取其指数:
xnew = np.exp(np.arange(log(x[0]), log(x[-1]), log(x[-1]/x[0])/x.size))
由于反复调用exp,结果可能会非常昂贵。一种更有效但稍微麻烦的方法是采用以下事实:在对数标度上,后续元素之间存在一个恒定因子:
f = pow(x[-1]/x[0], 1.0/(x.size-1) )
xnew[0] = x[0]
for i in range(1,x.size):
xnew[i] = xnew[i-1] * f
编辑:您的问题说dx =(x [-1] -x [0])/ x.size对我来说很奇怪,如果您想使用相同的数组大小来表示相同的范围
dx=(x[-1]-x[0]) / (x.size-1)
我的答案也是如此。
关于python - 在Python中以对数标度进行插值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20045947/