5 Stimmen

Interpolation bei vektorwertigen multivariaten Funktionen

In Python versuche ich, eine Routine zu konstruieren, die in vektorwertigen Daten in einem mehrdimensionalen (5+) Parameterraum interpoliert. d.h. ich habe eine Funktion, die eine Anzahl von Eingabevariablen nimmt und eine Anzahl von Ausgabevariablen zurückgibt. Im Moment gibt es einen Aufruf für jedes Element des Vektors. Die Daten befinden sich in einer Datei mit Spalten, also rufe ich sie mit

import numpy
[x_data,y_data,f1_data,f2_data] = numpy.loadtxt('data',unpack=True)

Dann instanziiere ich einzelne Interpolatoren mit Hilfe der SciPy-Funktionen, wie

from scipy import interpolate
f1 = interpolate.LinearNDInterpolator((x_data,y_data),f1_data)
f2 = interpolate.LinearNDInterpolator((x_data,y_data),f2_data)
...

Wenn ich nun den Interpolationsaufruf tätige, muss ich für jeden Wert interpolieren f1 , f2 usw., obwohl dies eigentlich in einem Arbeitsgang möglich sein sollte. Und ich vermute, dass eine Interpolation schneller sein sollte als 5 oder mehr.

Gibt es eine Möglichkeit, einen vektor- (oder array-) bewerteten Interpolator zu konstruieren?

Ich habe versucht, den Interpolator zu konstruieren mit

f = interpolate.LinearNDInterpolator((x_data,y_data),(f1_data,f2_data,...))

aber es gibt den Fehler

ValueError: unterschiedliche Anzahl von Werten und Punkten

Ich habe auch gelesen diese Frage und Antwort aber es geht um eine vektorwertige Funktion eines Skalars, die offenbar mit interp1d .

7voto

Gareth Rees Punkte 62623

scipy.interpolate.LinearNDInterpolator erwartet, dass seine Daten in zeilenweiser Reihenfolge empfangen werden: In Ihrem Fall muss das erste Argument ein Array von Paaren sein, nicht ein Paar von Arrays. Da Sie Ihre Daten beim Laden transponiert haben, müssen Sie sie wieder zurücktransponieren, bevor Sie sie an LinearNDInterpolator . Versuchen Sie etwas wie:

points = numpy.array((x, y)).T
values = numpy.array((f1, f2)).T
f = interpolate.LinearNDInterpolator(points, values)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X