2016-06-20 30 views
0

Ich benutzescipy interpolieren gibt nan in einigen Fällen

scipy.interpolate.LinearNDInterpolator 

und manchmal nans bekommen. Die Syntax, wie ich es verwenden, ist wie folgt:

#I have 10 3-dim points each with one correspondinf y value 
x=np.ndarray(shape=(10,3)) 
y=np.ndarray(shape=(10,1)) 
#fill x and y .... 
ip=scipy.interpolate.LinearNDInterpolator(x,y) 

#I want to know the y for 2 3-dim x's 
x_interpol= np.ndarray(shape=(2,3)) 
y_interpol=ip(x_interpol) 

Kennen Sie andere Interpolation Bibliotheken? Oder habe ich etwas falsch in der Verwendung?

+1

Können Sie einen MCVE (http://stackoverflow.com/help/mcve) hinzufügen, den wir ausführen können, der das Problem zeigt? –

+0

Sicher, ich habe ein minimales Beispiel unter https://github.com/kanban1992/scipy_interpolate_nan hinzugefügt. Vielleicht musst du das Skript mehrmals ausführen, weil nicht in jeder Ausführung Nans auftreten. Im Skript habe ich die vollständigen Datensätze x, y; Trainingsdatensätze x_training, y_training und Validierungsdatensätze x_validation, y_validation. Jedes Element im Validierungssatz wird zum Trainingssatz interpoliert. Am Ende überprüfe ich, wie groß der Fehler ist, den ich mit der Interpolation mache. –

+0

niemand eine idee? –

Antwort

0

Beachten Sie Folgendes aus der Dokumentation:

fill_value: float, optional Wert verwendet für die beantragten Punkte zu füllen außerhalb der konvexen Hülle der Eingangspunkte. Wenn nicht angegeben, ist der Standardwert nan.

Wenn Sie das ändern, erhalten Sie keine Nanos, sondern was immer Sie wollen.

Der Hinweis in der Dokumentation lautet: Der Interpolant wird durch Triangulieren der Eingangsdaten mit Qhull [R48] und auf jedem Dreieck mit linearer baryzentrischer Interpolation konstruiert.

Wenn Sie mit der Terminologie nicht vertraut sind, bedeutet dies, dass der Punkt, den Sie interpolieren möchten, in der konvexen Hülle der ursprünglich angegebenen Punkte liegen muss. Zum Beispiel, wenn Ihre Daten 1 Dimension sind, dann, um einen Punkt zu interpolieren, benötigen Sie einen größeren und einen kleineren, in 2 Dimensionen muss Ihr Punkt in einem Dreieck von ursprünglichen Punkten enthalten sein.