簡體   English   中英

在Python中以對數標度進行插值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM