Splines Interpolation für große Datenmengen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Dienstag 23. Oktober 2007, 15:14

Hallo zusammen,

vielleicht kann mir ja jemand weiterhelfen:
Ich suche eine Möglichkeit eine exakte univariate Splinesinterpolation auf eine "große" Datenmenge anzuwenden.
Es sollen aus eine Eingangsdatenmenge von ca. 150000 Werten ca. 600000 Werte Interpoliert werden.

Bisher benutze ich SciPy.​interpolate.​fitpack2.​UnivariateSpline. Mit "set_smoothing_factor(0)" erreiche ich, dass die Eingangsdaten nicht verfälscht werden und erhalten bleiben. Andernfalls würde ein Smooth-Spline berechnet werden.
Das Problem ist, dass die interpolation sehr lange dauert (gehen tut es).
Wenn ich SciPy.​interpolate.​fitpack2.​LSQUnivariateSpline verwende geht es schneller, aber ich habe das Problem, dass:
a) Die Eingangsdaten verfälscht werden da sich kein Smoothing-Factor setzen lässt
und b) Ich eine Reihe von Interpolierten Punkten mit dem Wert "nan" zurückbekomme.

Kann mir vielleicht jemand einen Tip geben, wie ich die Sache in den Griff bekomme?

Grüße
Maik
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 23. Oktober 2007, 15:51

Hoi,

Ich verwende meist interpolate.splrep mit interpolate.splrep. Was passiert, wenn Du dies verwendest? (Was bedeutet in dem Zusammenhang univariate? In meinem Verständnis trifft das auch auf diese beiden Funktionen zu.) Ich habe keine Ahnung, ob es schneller ist, als Dein Ansatz, aber Du kannst es ja versuchen.

Alternativ wäre natürlich eine eigene Implementierung für Deine Zwecke.

Brauchst Du *alle* 6e5 Werte? Oder reicht es Dir, wenn Du nur bestimmte Werte abfragen kannst? Dann wäre ggf. eine andere Möglichkeit (je nach Art Deiner Daten, natürlich), daß Du nur in best. Datenbereichen die Interpolation machst.

Überhaupt ist, ggf. eine Interpolation in überlappenden Abschnitten eine weitere mögliche Lösung.

Gruß,
Christian
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Mittwoch 24. Oktober 2007, 08:15

Also eine Interpolation von überlappenden Abschnitten habe ich gestern auch schon ausprobiert. Das klappt deutlich schneller. Wo ich vorher nach über einer Stunde abgebrochen habe macht er das ganze jetzt in 8-10 Sekunden. Das ist eigentlich völlig ausreichend. Aber ich werde mal die vorgeschlagenen Funktionen ausprobieren, wenn ich dazu komme.

Leider brauche ich jeden der Werte.

Univariate.... *puh*. Wie fasse ich das jetzt in Worte. Es gibt Bivariate und Univariate Splines. Mit Bivariaten interpolierst du Oberflächen. Univariate Splines sind für lineare Interpolationen gedacht. Zumindest nach der Scipy-Namensgebung. Allerdings ist das nicht so wirklich sauber. Wirkllich erklären kann ich es jetzt aber auch nicht. Sorry, dass ich hier passen muss.

Danke für die Tips.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 24. Oktober 2007, 08:43

tromai hat geschrieben:Univariate.... *puh*. Wie fasse ich das jetzt in Worte. Es gibt Bivariate und Univariate Splines. Mit Bivariaten interpolierst du Oberflächen. Univariate Splines sind für lineare Interpolationen gedacht. Zumindest nach der Scipy-Namensgebung. Allerdings ist das nicht so wirklich sauber. Wirkllich erklären kann ich es jetzt aber auch nicht. Sorry, dass ich hier passen muss.
Na ja, ich weiß schon, was univariate und multivariate Daten sind und habe ja auch gesagt, daß nach meinem Verständnis die oben genannten Funktionen (ohne Tricks bei der Anwendung) nur mit univariaten Daten zurecht kommen. Aber Du hast einen solchen Wert auf die Feststellung gelegt, daß es um univariate Daten geht, daß ich nachfragen wollte ...

Gruß,
Christian

PS Die Definitionen sind eigentlich sehr einfach: http://mathworld.wolfram.com/Univariate.html
Antworten