2015-03-30 21 views
6

Utilizzo di numpy.interp Sono in grado di calcolare l'interpolante lineare a tratti unidimensionale per una funzione con valori dati in punti dati discreti.Interpolazione logaritmica in python

È una funzione simile per restituirmi l'interpolazione logaritmica?

+0

Presumibilmente, intendi numpy.interp? – MJeffryes

+0

sì, era un errore di battitura. – DimKoim

+1

Dalla tua domanda non è chiaro cosa intendi esattamente con "interpolazione logaritmica". Potresti dare qualche esempio di input/output? –

risposta

11

In passato, ho appena finito l'interpolazione normale di farlo in log-spazio, vale a dire

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

Personalmente, preferisco di gran lunga il scipy interpolation functions (come @mylesgallagher menzioni), ad esempio:

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 

Quindi è possibile chiamarlo come una funzione su un valore arbitrario.

0

Se ti capisco, hai alcuni dati discreti che vuoi ottenere una serie di valori che si creerebbero tra i valori che hai. Suppongo che tu non voglia un'equazione di una funzione di registro che approssimi i dati. Purtroppo numpy non ha nulla al di fuori dell'interpolazione lineare peicewise, tuttavia se si guarda all'utilizzo di SciPy ha una funzione di interpolazione più potente. Vedere la documentazione SciPy's interpolate per ulteriori dettagli. Include interpolazioni più complesse come le interpolazioni "cubiche" che ti daranno approssimazioni molto lisce, ma non sarà un logaritmo e non ti darà un'equazione.

Se si desidera un'equazione, ciò che si sta cercando è una tecnica di regressione non interpolazione, ma non penso che lo sia.