Logarithmic interpolation in python

戏子无情 提交于 2020-06-24 22:13:43

问题


Using numpy.interp I am able to compute the one-dimensional piecewise linear interpolant to a function with given values at discrete data-points.

Is it a similar function to return me the logarithmic interpolation?


回答1:


In the past, I've just wrapped the normal interpolation to do it in log-space, i.e.

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))

Personally, I much prefer the scipy interpolation functions (as @mylesgallagher mentions), for example:

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

Then you can just call this as a function on an arbitrary value.




回答2:


If I am understanding you correctly, you have some discrete data that you want to get a smooth set of values that would arise in between the values you have. I am assuming you don't want an equation of a log function that approximates the data.

Unfortunately numpy does not have anything outside of the linear piecewise interpolation, however if you look into using SciPy it does have a more powerful interpolation function. See SciPy's interpolate documentation for more detail.

It includes more complex interpolations like 'cubic' interpolations which will give you very smooth approximations, but it won't be a logarithm and it won't give you an equation.

If you want an equation what you are looking for is a regression technique not interpolation, but I don't think you are.



来源:https://stackoverflow.com/questions/29346292/logarithmic-interpolation-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!