Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logarithmic interpolation in python

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?

like image 881
DimKoim Avatar asked Mar 30 '15 12:03

DimKoim


1 Answers

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.

like image 52
DilithiumMatrix Avatar answered Oct 10 '22 22:10

DilithiumMatrix