要插入我的数据,我目前使用此功能:
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
?
答案 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)
这同样适用于我的回答。