2009-07-29 13 views
20

Mam zestaw danych, które wygląda następująco:Python interpolacja

Table-1 
    X1 | Y1 
    ------+-------- 
    0.1 | 0.52147 
    0.02 | 0.8879 
    0.08 | 0.901 
    0.11 | 1.55 
    0.15 | 1.82 
    0.152 | 1.95 

Table-2 
    X2 | Y2 
    -----+------ 
    0.2 | 0.11 
    0.21 | 0.112 
    0.34 | 0.120 
    0.33 | 1.121  

muszę interpolacji wartości Y2 z Tabeli-2 dla wartości X1 z Tabeli-1, to znaczy, że trzeba znaleźć wartości od Y2 z następujących wartości: X

X1  | Y2 
    -------+------- 
    0.1 | 
    0.02 | 
    0.08 | 
    0.11 | 
    0.15 | 
    0.152 | 

Uwaga: Zarówno Tabela 1 & 2 mają nierówne długości. Liczba wpisów (X, Y) będzie się różnić, na przykład tutaj mamy 6 (X1, Y1) wpisów w Tabeli-1 i tylko 4 (X2, Y2) w Tabeli-2.

Który algorytm interpolacji powinienem użyć w Numpy i jak mam kontynuować?

Odpowiedz

29

numpy.interp wydaje się być funkcja chcesz: zdać X1 jako pierwszego argumentu x, twój X2 jako drugiego argumentu xp, Twój Y2 jako trzeci fp argumentów, a dostaniesz wartości Y odpowiadającej X1 współrzędne.

Y2_at_X1 = np.interp(X1, X2, Y2) 

Jestem zakładając chcesz całkowicie ignorują istniejące wartości Y1. To właśnie robi powyższy fragment. W przeciwnym razie musisz wyjaśnić swoje pytanie, aby wyjaśnić, jaką rolę możesz mieć dla Y1!

Jeśli potrzebujesz więcej niż interpolacji liniowej, sugeruję, abyś spojrzał na scipy.interpolate i jego tutorial zamiast próbować rozciągać się poza swoją prostotą ;-).

+0

Dziękuję Alex, Szczerze, mam kilka pomysłów .. Przepraszam za kiepskie wytłumaczenie! dla tej interpolacji i ekstrapolacji "Y2" NIE używam wartości "Y1". Ale będę przechowywać go jako tablicę i wykorzystywać go dalej. Ale moja funkcja jest nieliniowa, czy można zastosować techniki nieliniowej interpolacji? (np. Newton, typ Lagrange'a itp.), dla lepszej dokładności ... Jeszcze raz dziękuję –

+0

NP, zobacz moją edytowaną odpowiedź dla wskaźników do kodu scipy, który obsługuje interpolację nieliniową. –

+0

Przy tych konkretnych wartościach wszystkie wyniki z 'numpy.interp' będą wynosić 0,11. Wszystkie podane X1 są poza zakresem danego X2, więc to wcale nie jest inrerpolation. Aby uzyskać znaczący rezultat, musisz dopasować określoną sparametryzowaną funkcję do X2: Y2, a następnie eval dla X1 - możesz uzyskać bardzo różne wyniki w zależności od wyboru funkcji. – greggo