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

Nur Elemente bis Gegendiagonale in Zeilen in Matrix tauschen

 

aleinad
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 04.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2012, 16:04     Titel: Nur Elemente bis Gegendiagonale in Zeilen in Matrix tauschen
  Antworten mit Zitat      
Hallo Zusammen,

ich würde gerne bei meiner Matrix M in jeder Zeile, bzw auch in jeder Spalte jeweils alle Elemente bis zur Gegendiagonalen "flippen". Für die erste Zeile, bzw auch Spalte geht das noch mit fliplr, bzw mit flipud, aber dann... Ich hab schon alles gedreht, gespiegelt, transponiert und hab den richtigen Dreh nicht drauf Rolling Eyes

Beispiel: M sollte einmal in Form M1 und einmal in Form M2 sein.
Ich habe natürlich viele Matrizen, auch verschiedener Größen, bei denen ich diese Operation durchführen sollte; der Code sollte also verallgemeinerbar sein. Die "NaN" müssen erhalten bleiben, und die Zahlenwerte können leider auch "0" annehmen.

Code:

M = [1    2    3    4;
       5  NaN   6    NaN;
       7   8    NaN  NaN;
       9  NaN NaN  NaN]

M1 = [4   3     2        1;
         6  NaN  5      NaN;
         8   7     NaN  NaN;
         9  NaN NaN  NaN]

M2 =[9   8      6      4;
         7  NaN  3     NaN;
        5   2     NaN  NaN;
        1  NaN NaN  NaN]
 


Schonmal vielen Dank,
Grüße, aleinad
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: 07.03.2012, 17:40     Titel: Re: Nur Elemente bis Gegendiagonale in Zeilen in Matrix taus
  Antworten mit Zitat      
Halle aleinad,

Ich verstehe die benötigte Operation noch nicht. Was bedeutet "bis zur Gegendiagonalen flippen"?
Die NaNs in den Beispielen sind verwirrend - vielleicht. Kannst Du sie nur zur Demonstration der gewünschten Operation durch eindeutige Zahlen ersetzen? Oder hat die Transformation mit der Position der NaNs zu tun?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 04.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2012, 17:59     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke, dass du dir Zeit nimmst, mir bei meinem Problem zu helfen.

Ja, die Transformation soll jedes NaN auch als NaN belassen.

Die Diagonale verläuft ja von links oben nach rechts unten. Die Gegendiagonale hingegen von links unten nach rechts oben.

Was ich machen möchte:

1. Zeile: fliplr(Erstes bis letztes Element)
2. Zeile: fliplr(Erstes bis vorletztes Element)
3. Zeile: fliplr(Erstes bis vorvorletztes Element)
4. Zeile: .... usw

und das Ganze dann mit den NaN in eine neue Matrix packen. So, dass diese Dreiecksstruktur erhalten bleibt.

Und das Gleiche eben auch für alle Spalten. Aber das sollte ja dann analog zu schaffen sein.

Meine neueste Idee: Irdenwie über die Zeilendimension regeln?

Grüße, aleinad
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2012, 18:47     Titel:
  Antworten mit Zitat      
Halle aleinad,

Du hast Deine Schleife zum Flippen ja schon aufgeschrieben:
Code:
d=size(M,2);
for n=1:d
  M(n,1:d-n+1)=fliplr(M(n,1:d-n+1));
end;
 

1. Zeile bis zum letzten Element, 2. Zeile bis zum vorletzten, usw.

Gruß
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
aleinad
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 04.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2012, 21:33     Titel:
  Antworten mit Zitat      
Hi Sirius,

das hab ich ja wirklich. Danke für den Holzhammer Very Happy
(Manchmal hilfts schon, wenn man jemanden das Problem im Detail erklären muss.)
So funktioniert es einwandfrei.

Vielen lieben Dank,
aleinad
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.