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
.