|
|
Änderung einer Teilmatrix |
|
core |

Forum-Anfänger
|
 |
Beiträge: 37
|
 |
|
 |
Anmeldedatum: 07.07.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.09.2012, 14:36
Titel: Änderung einer Teilmatrix
|
 |
Hallo,
angenommen ich habe eine Matrix m, von der ich eine Teilmatrix s betrachte (z.B. alle geraden Spaltenindizes). Anschließend suche ich in dieser Teilmatrix nach Einträgen, die eine bestimmte Bedingung erfüllen und will sie in der Matrix m verändern. Wie geht das?
Beispiel:
Das Problem ist immer, dass ich die Indizes relativ zur Teilmatrix s bekomme und dann nicht weiß, wie ich sie in m-Indizes umwandeln soll bzw. dazu müsste ich zwei verschiedene Filterungen kombinieren: (:, [1 3]) & subIndices. Ist das irgendwie möglich?
|
|
|
|
|
Tusor |

Forum-Fortgeschrittener
|
 |
Beiträge: 71
|
 |
|
 |
Anmeldedatum: 02.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.09.2012, 14:53
Titel:
|
 |
Hallo,
schau dir in der Matlab-Hilfe unter Matrix Indexing mal die Beispiele zum Logical Indexing an. Vielleicht kommst du damit weiter.
Viele Grüße
Tusor
|
|
|
core |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 37
|
 |
|
 |
Anmeldedatum: 07.07.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.09.2012, 15:15
Titel:
|
 |
Nein, leider nicht. Klar, logical Indexing werde ich brauchen, aber das Problem ist, dass ich gleichzeitig zwei Indizierungen auf der linken Seite kombinieren müsste. Einmal
foo(:, [1 3]) = ... bzw. die Indizierung mit der ich meine Teilmatrix erzeuge und dann noch:
foo(foo==NaN) = ... bzw. die Indizierung mit der ich die Einträge der Teilmatrix verändere
Nur Indizes, die von beiden Filterungen angesprochen werden, will ich in der Matrix foo ändern.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 10.09.2012, 17:28
Titel: Re: Änderung einer Teilmatrix
|
 |
Hallo core,
Ja, das Problem ist mir auch immer wieder begegnet.
Mir ist das Beispiel mit "mod" nicht ganz klar, aber rein technisch funktioniert das Verknüpfen der Index-Vektoren.
Gruß, Jan
|
|
|
Tusor |

Forum-Fortgeschrittener
|
 |
Beiträge: 71
|
 |
|
 |
Anmeldedatum: 02.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.09.2012, 19:35
Titel:
|
 |
Hallo,
bei mir funktioniert der Code von dir (Jan S) leider nicht. Ich erhalte in der letzten Zeile "Index exceeds matrix dimensions".
Vielleicht könnte man aber einfach so eine Art Bitmasken erstellen, die man dann per AND verknüpft. Mir schwebt da folgendes Beispiel aus der Matlab-Hilfe zum Thema Logical Indexing vor:
Das könnte man noch etwas abändern:
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.09.2012, 16:51
Titel:
|
 |
Hallo Tusor,
Ja, der Code funktioniert nicht, wie bereits angedeutet, da ich nicht verstehe, was das "mod"-Kommando eigentlich bewirken soll. In Deinem Beispiel taucht nämlich ein "tmp" auf, das nicht definiert wurde.
Ich könnte etwas lauffähiges posten, wenn Du ein laufendes Beispiel zeigst.
Gruß, Jan
|
|
|
Tusor |

Forum-Fortgeschrittener
|
 |
Beiträge: 71
|
 |
|
 |
Anmeldedatum: 02.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.09.2012, 17:13
Titel:
|
 |
Hallo,
ich bin nicht der Threaderöffner (core)
Dein Beispiel funktioniert meiner Meinung nach aber auch ohne die mod2-Geschichte nicht. Ich habe versucht die Methode auf ein anderes Beispiel zu übertragen.
Viele Grüße
|
|
|
core |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 37
|
 |
|
 |
Anmeldedatum: 07.07.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.09.2012, 21:43
Titel:
|
 |
Achso sorry, tmp sollte foo heißen, hab wohl vergessen, da umzubenennen.
Im Prinzip mache ich das auch so wie von Tusor beschrieben, also logische Maske über die ganze Matrix erzeugen und damit dann rumspielen. Trotzdem sieht es nicht nach der effizientesten Methode für ein immer wiederkehrendes Problem aus
|
|
|
core |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 37
|
 |
|
 |
Anmeldedatum: 07.07.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.09.2012, 12:39
Titel:
|
 |
Blödsinn, richtig heißen, muss es so:
Also noch mal: Ausgangsmatrix: foo, Filterung 1: foo(:, [1 3]), Filterung 2 auf Filterung 1: find(mod...)), kann aber jede beliebige Bedingung sein.
Bisher würde ich das eben so lösen:
Schön ist aber was anderes und sobald man noch eine 3. Bedingung dranhängt, hat man wieder dasselbe Problem.
|
|
|
Tusor |

Forum-Fortgeschrittener
|
 |
Beiträge: 71
|
 |
|
 |
Anmeldedatum: 02.07.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.09.2012, 13:24
Titel:
|
 |
Wenn du die Masken wirklich wie in meinem Vorschlag per AND oder OR verknüpfst, kannst du beliebige Filter kombinieren. Das ist doch ganz OK.
|
|
|
|
|
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.
|
|