在python中以对数标度插值

时间:2013-11-18 10:52:08

标签: python numpy scipy interpolation logarithm

要插入我的数据,我目前使用此功能:

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相当于xdx=(x[-1]-x[0])/x.size的常规网格上重新采样。如何做同样但在对数刻度上重新采样x

1 个答案:

答案 0 :(得分:1)

您可以采用对数,线性重新采样,然后取其指数:

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)

这同样适用于我的回答。