python 中的对数插值

Logarithmic interpolation in python

使用 numpy.interp 我能够计算一维分段线性插值到在离散数据点处具有给定值的函数。

是不是和return我的对数插值类似的功能?

如果我对您的理解正确,您有一些离散数据,您希望获得一组平滑的值,这些值将出现在您拥有的值之间。我假设您不想要近似数据的对数函数方程。

不幸的是,numpy 除了线性分段插值之外没有任何东西,但是如果您查看使用 SciPy it does have a more powerful interpolation function. See SciPy's interpolate 文档以获取更多详细信息。

它包括更复杂的插值,如 'cubic' 插值,它会给你非常平滑的近似值,但它不会是对数,也不会给你方程。

如果你想要一个方程式,你正在寻找的是回归技术而不是插值法,但我认为你不是。

过去,我只是将正常的插值包装在 log-space 中,即

def log_interp(zz, xx, yy):
    logz = np.log10(zz)
    logx = np.log10(xx)
    logy = np.log10(yy)
    return np.power(10.0, np.interp(logz, logx, logy))

就个人而言,我更喜欢 scipy interpolation functions(正如@mylesgallagher 提到的),例如:

import scipy as sp
import scipy.interpolate

def log_interp1d(xx, yy, kind='linear'):
    logx = np.log10(xx)
    logy = np.log10(yy)
    lin_interp = sp.interpolate.interp1d(logx, logy, kind=kind)
    log_interp = lambda zz: np.power(10.0, lin_interp(np.log10(zz)))
    return log_interp

然后您可以将其作为任意值的函数调用。