2017-07-04 4 views
2

Füllung I haben tide Beobachtungen jeweils 5 min, möchte ich sie in einem 1 min-Intervall zu interpolieren.Spline-Interpolation in interp1 ohne nan Werte in

Ich habe versucht, es in Python zu tun, aber es dauert zu viel Zeit, also bin ich zu MATLAB umgezogen. Das Problem besteht darin, dass die Spline-Methode NaN-Werte ausfüllt.

Das Bild unten erläutert das Problem, ich möchte eine Spline-Interpolation haben, ohne die NaN gefüllt Werte sind. Wie kann ich meine interp1 Funktion dazu veranlassen?

the image explain it

file='NANTES_5min_nan.txt' 
[date, hauteur] = lecture_hfs(file); 
vect=[date(1):1/24/60:date(end)]; 
h_interp=interp1(date,hauteur,vect,'spline'); 

h_interp_lin=interp1(date,hauteur,vect,'linear'); 

die zweite Zahl ist von Python Interpolation. Die Ergebnisse sind gut, aber leider nur für 1 Monat Daten. wenn ich es für die ganzen Daten anwenden möge (17 Jahre) die Ausführung endet nie here is the link for python figure

Antwort

0

Statt vect direkt als Abfragepunkte verwenden, können Sie die Werte von vect ersetzen, die in hauteur durch NaN in der Nähe eines NaN Wert sind.

temp = date; % copy of the original dates 
temp(isnan(hauteur))=NaN; % set the values which are NaN in hauteur to NaN 
h_interp = interp1(date,hauteur,interp1(date,temp,vect),'spline'); % the inner interpolation results in vect with NaNs where appropriate 

Ein bisschen chaotisch, und es könnte sein, elegantere Wege, aber ich wurde von der Möglichkeit fasziniert, dies zu lösen, indem sie eine andere Interpolation nisten: Dies kann unter Verwendung eines anderen (linear) Interpolation durchgeführt werden.

+0

danke @Leander, es funktioniert gut. Ich habe gedacht, diese beiden Zeilen nach der Interpolation hinzuzufügen: 'idx = find (isnan (h_interp_lin)); h_interp (idx) = nan; 'um gefüllte NaN-Werte durch Interpolation zu entfernen, aber ich bevorzuge Ihre Methode. –

+0

Das würde natürlich auch funktionieren. Du könntest das 'find()' tough überspringen, es wäre nicht nötig. –

+0

Ja, es stimmt, ich bin es nicht gewohnt mit MATLAB zu programmieren. Aber es ist eine großartige Gelegenheit, damit anzufangen. Einen schönen Tag noch –