|
|
mehrfach vorkommende indices |
|
Flutsch |

Forum-Anfänger
|
 |
Beiträge: 19
|
 |
|
 |
Anmeldedatum: 20.03.10
|
 |
|
 |
Wohnort: Rostock
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.04.2013, 21:43
Titel: mehrfach vorkommende indices
|
 |
|
 |
|
moin,
ich habe momentan ein Problem welches ich gerne ohne ohne das Benutzen einer schleife lösen möchte:
ich habe eine 2D-Matrix und einen Vektor in dem die linearen indices zu ausgewählten Punkten stehen. An diesen Punkten soll die Matrix einfach um 1 erhöht werden, soweit kein Problem
Allerdings kann im Vektor idx ein Wert auch mehrfach vorkommen und dieser sollte dann auch pro Vorkommen je einmal um 1 erhöht werden.
Hat jemand eine Idee/Ansatz wie ich das möglichst schnell lösen kann? Die einfachtste Methode den Vektor einfach per for-schleife durchzugehen und die entsprechenden Punkte um 1 zu erhöhen ist ja eher mieß...
Das klingt irgendwie als gäbe es eine total simple lösung allerdings komme ich einfach auf nix sinnvolles...
Ein weiteres Problem welche sich momentan habe, dass jedoch nicht ganz so stark in's Gewicht fällt, ist der Zugriff auf eine 4D-Matrix. Ich möchte obiges quasi für eine Ebene im 4D-Raum machen, was ich momentan wie folgt erledige
allerdings erscheint mir das extra anlegen einer 2D_matrix ein umweg zu sein...
Danke schonmal im Vorraus für die Mühe..
Gruß,
Flutsch
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 01:21
Titel: Re: mehrfach vorkommende indices
|
 |
Hallo Flutsch,
Wieso ist der Ansatz mit einer FOR-Schleife "eher mies"? FOR-Schleifen waren vor Matlab 6.5 (2002) langsam in Matlab, aber seit dem lässt sich das Dank JIT-Beschleunigung nicht mehr generell sagen.
Du kannst entweder ACCUMARRAY verwenden, oder zunächst per HISTC abzählen, welcher Index wie of vorkomt.
Dein zweites Problem liesse sich lösen, wenn du den linearen wieder in den Matrix-Index umwandelst, z.B. per IND2SUB.
Gruß, Jan
|
|
|
jurtsche |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 26.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 08:55
Titel:
|
 |
Hi,
wenn ich das richtig verstanden habe, würde ich dein erstes Problem so lösen:
LG
|
|
|
Flutsch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 19
|
 |
|
 |
Anmeldedatum: 20.03.10
|
 |
|
 |
Wohnort: Rostock
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 09:03
Titel:
|
 |
|
 |
|
Erstmal danke für die Hilfe.
@jurtsche
Das löst aber mein problem nicht, da so mehrfach vorkommende indices nur einmal erhöht werden...
Jan S hat mich da glaub ich besser verstanden...
@Jan S
auf acumarray wäre ich so schnell nich gekommen...und hätte es auch ehrlich gesagt nicht verstanden wie das bei meinem problem weiterhilft wenn es nicht in der Hilfe ein Bsp. Gäbe das genau mein Problem adressiert...damit hat sich dann auch das 2. Problem erledigt...
Nochmal zur for-schleife: der idx vektor kann recht groß sein und das ganze geschieht schon innerhalb von 2 geschachtelten for-schleifen, daher wollte ich noch eine schleife vermeiden, da ich nicht weiß ob/wan ln vom JIT optimiert wird und ich immer dachte das man große for-schleifen generell versuchen sollte zu vermeiden? Oder ist diese aussage obsolet?
würde im konkreten anAnwendungsfall ja heißen ich benutze einfach ne for-schleife anstatt accumarray und das resultat wäre aufhedenfall mind. Gleich schnell?
Gruß,
Flutsch
|
|
|
jurtsche |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 26.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 09:21
Titel:
|
 |
Achja, das wusste ich gar nicht, dass er nur einmal erhöht, wenn es im idx mehrfach vorkommt. ist aber klar, da er es nicht speichert bzw. erst am ende der Operation und daher immer den unveränderten Wert liest..
dann mit Jan's Idee:
LG
|
|
|
Andy386 |

Forum-Guru
|
 |
Beiträge: 485
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.1/8
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 09:45
Titel:
|
 |
jurtsche hat Folgendes geschrieben: |
LG |
Das ist ne schöne Lösung. Aus Performancegründen würde ich vorher noch perf_helper=unique(idx) berechnen, oder bringt auch das nix mehr?
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
|
|
|
jurtsche |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 26.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 09:49
Titel:
|
 |
Andy386 hat Folgendes geschrieben: |
Das ist ne schöne Lösung. |
Danke.
Andy386 hat Folgendes geschrieben: |
Aus Performancegründen würde ich vorher noch perf_helper=unique(idx) berechnen, oder bringt auch das nix mehr? |
Ja, da hast du natürlich recht, 3 mal ausrechnen ist nicht optimal.
aber jetzt.
LG
|
|
|
Flutsch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 19
|
 |
|
 |
Anmeldedatum: 20.03.10
|
 |
|
 |
Wohnort: Rostock
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 12:29
Titel:
|
 |
die Lösung mit hist bzw. histc ist wirklich simpel
Allerdings mache ich es nun doch mittels accumarray, da beide Probleme nun mit einem Einzeiler gelöst werden können und ich mir außerdem einmal nen sub2ind erspare (ursprüngliche liegen mir die indices nämlich doch in der form [row,col] vor, ich brauchte den linearen idx aber sowieso zum ordnen via unique, was jetzt wegfällt)
wen es interessiert hier der Code
|
|
|
|
|
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.
|
|