2015-03-30 18 views
6

Używanie numpy.interp Jestem w stanie obliczyć jednowymiarowy kawałek liniowy interpolant do funkcji z podanymi wartościami w dyskretnych punktach danych.Interpolacja logarytmiczna w pythoniu

Czy jest to funkcja podobna do zwracania mi logarytmicznej interpolacji?

+0

Przypuszczalnie masz na myśli numpy.interp? – MJeffryes

+0

tak, to był literówka. – DimKoim

+1

Z twojego pytania nie wynika jednoznacznie, co dokładnie rozumiesz przez "interpolację logarytmiczną". Czy możesz podać przykładowe dane wejściowe/wyjściowe? –

Odpowiedz

11

W przeszłości, mam tylko owinięty normalne interpolacji to zrobić w dzienniku przestrzeni, tj

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

Osobiście wolę ten scipy interpolation functions (jak @mylesgallagher wskazań), na przykład:

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 

Następnie można po prostu nazwać tę funkcję jako dowolną wartość.

0

Jeśli cię rozumiem, masz pewne dyskretne dane, które chcesz uzyskać płynny zestaw wartości, które powstałyby pomiędzy wartościami, które masz. Zakładam, że nie chcesz równania funkcji dziennika, która przybliża dane. Niestety numpy nie ma niczego poza liniową interpolacją typu "peicewise", jednak jeśli spojrzysz na to używając SciPy, ma ona silniejszą funkcję interpolacji. Aby uzyskać więcej informacji, zobacz dokumentację SciPy's interpolate. Obejmuje on bardziej złożone interpolacje, takie jak interpolacje "sześcienne", które dają bardzo płynne przybliżenia, ale nie będzie to logarytm i nie da ci równania.

Jeśli chcesz równania, czego szukasz, to technika regresji, a nie interpolacji, ale nie sądzę, że jesteś.