WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

NaN in Meshgrid setzen

 

Vertigo
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.12.2016, 02:08     Titel: NaN in Meshgrid setzen
  Antworten mit Zitat      
Hi!

Ich möchte aus einer 2D-Matrix eine 2D meshgrid-Matrix erstellen. In der Matrix sind unterschiedliche Werte und NaNs gespeichert. Die NaNs aus der 2D-Matrix sollen in die X- und Y-meshgrid-Matrix übernommen werden und die zugehörigen Stellen ersetzen.

Als Beispiel:

a = [1 NaN 3; 4 5 6; 7 8 NaN]

soll

X = [1 NaN 3; 1 2 3; 1 2 NaN]

Y = [1 NaN 1; 2 2 2; 3 3 NaN]

werden.

Nun habe ich mir gedacht man könnte es so lösen:

[X,Y] = meshgrid(1:length(matrix),1:length(matrix)) wäre jetzt die meshgrid Matrizen von matrix zu erstellen.

und ich dachte die NaNs könnte man so übernehmen:

[X(isnan(matrix))= NaN,Y(isnan(matrix))= NaN] = meshgrid(1:length(matrix),1:length(matrix))


funktioniert natürlich nicht. Wo ist da mein Denkfehler? Ich bin leider absoluter Beginner. Embarassed Embarassed Embarassed

Viele Grüße und angenehme Feiertage.
Vertigo
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.12.2016, 21:16     Titel: Re: NaN in Meshgrid setzen
  Antworten mit Zitat      
Hallo Vertigo,

Meinst Du:
Code:
a = [1 NaN 3; 4 5 6; 7 8 NaN]
[X,Y] = meshgrid(1:size(a,1), 1:size(a, 2))

length ist hier ja nicht im Allgmeinen Fall richtig und "matrix" ist wohl "a"?
Dann:
Code:
X(isnan(a)) = NaN;
Y(isnan(a)) = NaN;

Das klappt aber nur bei quadratischem "a", wenn X, Y und a die gleiche Größe haben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Vertigo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2016, 18:07     Titel:
  Antworten mit Zitat      
Vielen dank für die Antwort. Ja. a = matrix. Das war jetzt etwas verwirrend von mir dargestellt.

Code:

a = [1 NaN 3; 4 5 6; 7 8 NaN]
[X,Y] = meshgrid(1:size(a,1), 1:size(a, 2))
 


Ja, so ist es natürlich richtig.


Leider ist matrix fast nie quadratisch.

Code:

X(isnan(a)) = NaN;
Y(isnan(a)) = NaN;
 


funktioniert leider nicht, so dachte ich ja auch erst.
Die meshgrid X und X werden jetzt korrekt aufgestellt, allerdings ohne die NaNs.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.12.2016, 14:07     Titel:
  Antworten mit Zitat      
Hallo Vertigo,

Wenn die Matrix nicht quadratisch ist, wie soll denn das Ergebnis aussehen? Ist das bereits klar definiert worden? Falls nicht, lässt es sich noch nicht in Matlab implementieren ;-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Vertigo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.12.2016, 00:08     Titel:
  Antworten mit Zitat      
Es ist so einfach. Nach diesem Prinzip kann es funktionieren:

Code:


matrix =   [14 2  NaN   9 ;
           42 54  NaN  97 ;
           17 NaN 92 231]
   
       
matrix_size = size(matrix)
r = matrix_size(1,1);
c = matrix_size(1,2);
       
[X,Y] = meshgrid(1:size(matrix,2),1:size(matrix,1))
Y(isnan(matrix(1:r, 1:c, 1))) = NaN

 


ergibt:

Code:


matrix =

    14     2   NaN     9
    42    54   NaN    97
    17   NaN    92   231


X =

     1     2     3     4
     1     2     3     4
     1     2     3     4


Y =

     1     1     1     1
     2     2     2     2
     3     3     3     3


Y =

     1     1   NaN     1
     2     2   NaN     2
     3   NaN     3     3

 


In meinem Fall brauche ich nur den Y-meshgrid
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.01.2017, 03:38     Titel:
  Antworten mit Zitat      
Hallo Vertigo,

Das ist aber doch genau die gleiche Lösung, wie ich sie vorschlug, nur komplizierter ausgedrückt:

Code:
[X,Y] = meshgrid(1:size(matrix,2),1:size(matrix,1))
Y(isnan(matrix)) = NaN

Und genau das klappt nur, wenn Y und matrix die gleiche Größe haben, also matrix quadratisch ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Vertigo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.01.2017, 22:12     Titel:
  Antworten mit Zitat      
Ja, Y und Matrix müssen die gleiche Größe haben, sonst wäre die Übung ja komplett sinnfrei. Ich dachte du meinst, ob "matrix" immer quadratisch sein muss. Und matrix soll irgendeine Größe quadratisch und nicht quadratisch haben können.

Code:

Y(isnan(matrix)) = NaN
 


kann so eben nicht funktionieren, deswegen der code wie oben von mir geschrieben. Oder habe ich dich jetzt komplett missverstanden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.01.2017, 20:49     Titel:
  Antworten mit Zitat      
Hallo Vertigo,
Code:

und
Code:
matrix_size = size(matrix);
r = matrix_size(1,1);
c = matrix_size(1,2);
Y(isnan(matrix(1:r, 1:c, 1))) = NaN

ist vollkommen equivalent. Da "matrix" ein 2D-Array ist, ist die dritte Dimension "1" hier überflüssig und wird ignoriert. "matrix(1:r, 1:c)" ist dann das gleiche wie "matrix". Wenn also die obere Methode nicht funktioniert, kann die untere auch nicht laufen. Und andersherum: Wenn Deine Lösung funktioniert, ist auch "Y(isnan(matrix)) = NaN" korrekt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Vertigo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 24.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2017, 20:55     Titel:
  Antworten mit Zitat      
Ah, ok, ich verstehe. Du hast natürlich vollkommen recht. Ich hatte vorher auch eine mehrdimensionale Matrix verwendet (:, : , 3). Das habe ich dummerweise unterschlagen hier zu posten. Deswegen hatte es auch nie funktioniert. Mein Fehler. Vielen Dank für die Hilfe. Es werden bestimmt bald weitere Fragen folgen. Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.