2016-07-09 10 views
2

Ich habe zwei Datenpunkte x und y:lineare Interpolation zwischen zwei Datenpunkten

x = 5 (value corresponding to 95%) 
    y = 17 (value corresponding to 102.5%) 

Nein Ich mag würde den Wert für xi berechnen, die zu 100% entsprechen soll.

x = 5 (value corresponding to 95%) 
xi = ?? (value corresponding to 100%) 
y = 17 (value corresponding to 102.5%) 

Wie soll ich dies mit Python tun?

+0

Off-Thema: Beachten Sie, dass Sie buchstäblich für lineare Interpolation fragen. Beim Sammeln von Daten im realen Leben ist die Verteilung nicht unbedingt linear. – Aguy

Antwort

5

ist das was du willst?

In [145]: s = pd.Series([5, np.nan, 17], index=[95, 100, 102.5]) 

In [146]: s 
Out[146]: 
95.0  5.0 
100.0  NaN 
102.5 17.0 
dtype: float64 

In [147]: s.interpolate(method='index') 
Out[147]: 
95.0  5.0 
100.0 13.0 
102.5 17.0 
dtype: float64 
+0

ja @MaxU, danke. Das ist es im Grunde genommen. –

+0

11 ist nicht das richtige Ergebnis, obwohl die Lösung korrekt aussieht. stimmt etwas mit der Interpolate-Funktion nicht? –

+0

@Al_Iskander pass 'method =' index' ', wenn der Index berücksichtigt werden soll. – ayhan

4

Wir können dies leicht ohne Python in einem Diagramm zeichnen:

Dies zeigt uns, was die Antwort sollte (13) sein.

Aber wie berechnen wir das? Zuerst finden wir die Steigung mit diesem:

Die Zahlen in die Gleichung diese geben:

So wissen wir, für 0.625 erhöhen wir den Y-Wert durch, wir erhöhen der X-Wert von 1.

Wir haben gegeben, dass Y ist 100. Wir wissen, dass 102,5 bezieht sich auf 17. 100 - 102.5 = -2.5. -2.5/0.625 = -4 und dann 17 + -4 = 13.

Dies funktioniert auch mit den anderen Nummern: 100 - 95 = 5, 5/0.625 = 8, 5 + 8 = 13.

Wir können auch rückwärts gehen mit dem Kehrwert des Gradienten (1/m).

Wir haben gegeben, dass X 13 ist. Wir wissen, dass 102,5 bezieht sich auf 17. 13 - 17 = -4. -4/0.625 = -2.5 und dann 102.5 + -2.5 = 100.

Wie machen wir das in Python?

def findXPoint(xa,xb,ya,yb,yc): 
    m = (xa - xb)/(ya - yb) 
    xc = (yc - yb) * m + xb 
    return 

und einen Y-Punkt des X-Punkt gegeben zu finden:

def findYPoint(xa,xb,ya,yb,xc): 
    m = (ya - yb)/(xa - xb) 
    yc = (xc - xb) * m + yb 
    return yc 

Diese Funktion wird auch von den Datenpunkten extrapolieren.

+0

Ja, ich bekomme auch die Antwort 13. Aber die Antwort 11 wird akzeptiert !!! – Eular

+0

Siehe Die erste Antwort mit Pandas-Serie, hat es 11 für den Eingang 100 – Eular

+0

tatsächlich seltsam. Ich akzeptierte zuerst, weil die Lösung formal korrekt aussah, aber das Ergebnis 11 ist nicht korrekt und 13 ist besser. –