Verfasst am: 19.02.2014, 09:22
Titel: 2D Interpolation mit NaN
guten morgen,
ich habe eine 600x260 Matrix mit relativ vielen NaN-Werten. Diese wollte ich jetzt mittels 2D-Interpolation bearbeiten, und die gesamte Matrix mit Werten auffüllen.
Wenn ich mir die Matrix M_interp jedoch ausgeben lassen, stehen noch immer die NaN-Werte drinnen. Wie kann ich mit NaN-Werte eine Interpolation durchführen?
Verbesser mich, wenn das nicht Deiner Vorstellung entspricht.
MfG
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 19.02.2014, 09:49
Titel:
danke für deine Antwort.
Ich möchte die NaN durch Interpolation wegbringen, so dass ich am Ende eine Matrix habe, mit 'realistischen' Zahlen, die ich dann graphisch darstellen kann bzw. zur Weiterrechnung verwende.
Wenn ich meine NaN-Werte auf Null setzte, werden diese dann zur Interpolation herangezogen?
Ich frage mich wie aus NaNs "realitische" Werte werden sollen. Wenn in der Matrix die NaNs durch null ersetzt werden und Du an diesen Stellen interpolierts kommt wieder null raus.
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 19.02.2014, 10:07
Titel:
wenn das nicht funktioniert, wie kann ich dann meine matrix mit den fehlenden Werten ersetzen. Ich habe mir gedacht, dass die Interpolation genau für solche Fälle da ist.
Gibt es sonst eine Möglichkeit meine Matrix aufzufüllen?
so etwas ähnliches, wie dein 1d Beispiel habe ich nun auch gemacht. Wir betrachten die NaN-Stellen als fehlend, wir suchen also die Positionen raus, für die wir Werte haben (valid).
Die unbesetzten Stellen (~valid) werden mit Hilfe der besetzten positionen auf das vorgegebene Gitter interpoliert.
% einige sind aber NaNs.
xi = ceil(rand(100,1)*20);
yi = ceil(rand(100,1)*20);
NaNidx = sub2ind(size(Z),xi,yi);
Z_NaN = Z;
Z_NaN(NaNidx) = NaN;
% ---- hier startest du mit deinem Problem --- % mit griddata original wieder möglichst gut herstellen
valid = ~isnan(Z_NaN);
plot3(X(valid),Y(valid),Z(valid),'ko','MarkerFaceColor','black')% schwarz: vorhanden plot3(X(~valid),Y(~valid),Z(~valid),'ko','MarkerFaceColor','red')% rot: NaN (sind gar nicht da)
% die grünen Punkte versuchen nun, die Lage der roten Punkte zu % interpolieren
Zi = griddata(X(valid),Y(valid),Z(valid),X,Y);
plot3(X,Y,Zi,'go','MarkerFaceColor','green')
danke für deinen Code, ich habe das jetzt für mein Programm übernommen. Wenn ich mir aber die Matrix ausgeben lasse, sind es zwar weniger Werte mit NaN, aber es sind immer noch NaN-Werte drinnen.
das verwundert mich. Kann sein, dass du was mit X und Y vertauschst? Bei Matrizen ist überlichwe Weise der erste Index für die Anzahl der Zeilen und der Zweite Index für die Anzahl der Spalten. Eventuell hast du dann beim Interpolieren genau X und Y vertauschst?
Ansonsten müsstest du mal deine Matrix zur Verfügung stellen. Also als .mat-file speichern, Zippen und hier anhängen. Sollten das vertrauliche Daten sein, dann mach vorher sowas wie
das ist keine 600x200, sondern eine 169x37 Matrix. Zudem hat die Matrix sehr viele NaN's außen. Soweit ich weiß, kann griddata nur interpolieren, nicht extrapolieren. Für die Randwerte gibt es aber keine Nachbarn, zwischen denen interpoliert werden kann, daher bleiben dort NaNs.
Aber es ist schon etwas fragwürdig ob das, was da bei der Interpolation rauskommt, viel mit dem zu tun hat, was da eigentlich zu erwarten wäre - man sieht schon einen Unterschied.
Was du am Rand machen solltest, kann ich dir auch nicht verraten. Vermutlich gar nichts, da kann man keine Aussage treffen, da m an nichts weiß.
da meine Frage zu dem Thema passen würde, habe ich mir gedacht, ich stelle sie mal hier rein. Hoffe, dass das in Ordnung ist.
Ich habe so ein ähnliches Problem, mit vielen NaN-Werte an den Außenrändern meiner Matrix. Meine Frage ist jetzt: kann ich diese Werte mittels Extrapolation irgendwie auffüllen?
Liebe Grüsse,
heinz
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.