[英]Interpolate on a logarithmic scale in python
要插值數據,我目前使用此功能:
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)
我的答案也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.