|
|
|
Bestimmte Elemente zweier Matrizen vertauschen |
|
| Ajax |

Forum-Century
|
 |
Beiträge: 176
|
 |
|
 |
Anmeldedatum: 09.09.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 10:10
Titel: Bestimmte Elemente zweier Matrizen vertauschen
|
 |
Hallo liebe Matlab-Gemeinde,
bei meiner derzeitigen Arbeit habe ich öfter das Problem, dass ich bestimmte Teile bzw. Elemente zweier Matrizen vertauschen soll. Dies habe ich bis jetzt immer über den folgenden Umweg gemacht:
Ich hoffe durch dieses Beispiel wird auch klar, was ich machen will.
Hier nun meine Frage: Gibt es eine Funktion, die dieses Vertauschen durchführt? Auch wenn es kein großes Problem darstellt diese Zeilen zu tippen, würde es doch die Lesbarkeit des Codes erhöhen.
Vielen Dank im voraus für die Hilfe,
mfg
Ajax
|
|
|
|
|
|
| Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 10:19
Titel:
|
 |
|
das problem glaube ich bestand schonmal. und ich glaube es gab keinen befehl der direkt swapt. nur über deine zwischen speichern lösung. wenn man keine 3. matrix will kann man das auch noch mit summen und differenzen innerhalb der 2 matrizen lösen aber dadurch wird der code auch nicht lesbarer.
|
|
|
|
| Ajax |
Themenstarter

Forum-Century
|
 |
Beiträge: 176
|
 |
|
 |
Anmeldedatum: 09.09.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 10:38
Titel:
|
 |
Alles klar, vielen Dank für die schnelle Antwort.
Viele Grüße,
Ajax
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 11:07
Titel:
|
 |
Hallo,
wenn du das öfter verwendest, kannst du dir ja selbst eine Funktion dazu schreiben:
... und da deinen Code reinplazieren.
Dann diese Funktion immer aufrufen, wenn du das machen möchtest.
Grüße,
Harald
|
|
|
|
| Nras |

Forum-Meister
|
 |
Beiträge: 608
|
 |
|
 |
Anmeldedatum: 21.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.12.0.635 (R2011a)
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 11:46
Titel:
|
 |
Hallo,
so etwas ähnliches hatte ich auch schon mal, und lass dir gesagt sein, dass ganze Matrizen durch Funktionen zu schicken und dort zu verändern, leider ziemlich langsam ist, da Matlab dann wirklich Matrizen kopiert und keine Verweise nimmt.
Das macht die Sache zwar lesbarer, wird aber bei großen Matrizen mindestens um Faktor 2-3 langsamer. In der Regel verändere ich Matrizen daher nicht mehr in Funktionen (selbst wenn nur ein einziger Eintrag verändert wird, kopiert Matlab die ganze Matrix).
Grüße.
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 12:02
Titel:
|
 |
Hallo Nras,
das ist nur teilweise korrekt.
Wenn A an eine Funktion übergeben wird und dort nicht verändert wird, wird keine Kopie angelegt.
Dieses Verhalten ist auch als "copy-on-write" - Verhalten bekannt, siehe z.B. hier:
http://blogs.mathworks.com/loren/20.....-functions-and-variables/
Auch wenn A an eine Funktion übergeben, verändert und wieder zurückgegeben wird
und diese Funktion so aufgerufen wird
wird keine Kopie von A oder B angelegt.
Dieses Verhalten ist als "in-place operations" bekannt, siehe z.B. hier
http://blogs.mathworks.com/loren/20.....place-operations-on-data/
Man muss dabei darauf achten, in der Funktion durchgängig denselben Variablennamen zu verwenden und ebenso beim Aufruf. Ansonsten werden in der Tat Kopien erzeugt, und das kann den Code ausbremsen.
Grüße,
Harald
|
|
|
|
| Ajax |
Themenstarter

Forum-Century
|
 |
Beiträge: 176
|
 |
|
 |
Anmeldedatum: 09.09.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.03.2012, 13:24
Titel:
|
 |
Auf die eigene Funktion hätte ich natürlich auch selber kommen können... Aber ich dachte so eine doch relativ simple Sache gibt es bestimmt direkt bei Matlab.
Vielen Dank noch einmal für die Hilfe!
mfg
Ajax
|
|
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|