|
|
Vektor an best. Stellen ändern -> Doppelte Stellen !? |
|
Andy386 |

Forum-Guru
|
 |
Beiträge: 485
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.1/8
|
 |
|
|
 |
|
Verfasst am: 26.10.2009, 17:23
Titel: Vektor an best. Stellen ändern -> Doppelte Stellen !?
|
 |
Ich steh mal wieder auf dem Schlauch...
Ich habe einen Vektor a und einen Indexvektor idx. Ich möchte alle Stellen idx von a um einen bestimmten Wert (der jeweils in b steht) erhöhen. Quasi
nun mein Problem: Wenn in idx zwei Stellen identisch sind, wird die letzte ignoriert. Da fiel mir nur noch
ein. Wie zu erwarten, ist das irrsinnig langsam.
Wie kann ich dieses eigentlich einfach anmutende Problem lösen?
|
|
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 26.10.2009, 18:25
Titel:
|
 |
Lösung aber ich auch (noch) keine, nur die Idee, dass man da mit UNIQUE vorgehen könnte. Eigentlich bebnötigt man ja das genaue Gegenteil.
Andreas
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 26.10.2009, 19:31
Titel:
|
 |
Hallo,
Grobvorschlag:
- idx mit sort sortieren (sort ist schneller als unique)
- die Stellen suchen, an denen diff(idx) 0 ist (das sind die mehrfachen Indizes).
- diese Stellen rausschmeissen und die entsprechenden Inkremente aufaddieren
Grüße,
Harald
|
|
|
Andy386 |
Themenstarter

Forum-Guru
|
 |
Beiträge: 485
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.1/8
|
 |
|
|
 |
|
Verfasst am: 26.10.2009, 23:14
Titel:
|
 |
okay, das ist schon mal ein Ansatz...
Nur wie soll ich die, die ich rauswerfe aufsummieren ? Das wäre ja eine Summe von Elementen aus b...
liefert z.B.
diff II versagt in der log. Verknüpfung, lt. Profiler...
ich könnt heulen
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 27.10.2009, 21:33
Titel:
|
 |
Hallo,
ich müsste mir das mal genauer und in Ruhe ansehen, aber erstmal folgende Hinweise:
b = rand(1000) ist eine quadratische Matrix, b(idx(i)) indiziert da dann linear rein. Ist das wirklich, was du willst? Mein Eindruck ist auch, dass da eher b(i) stehen sollte. Mal davon abgesehen, dass man i als Schleifenindex vermeiden sollte, da das eigtl die imag. Einheit ist.
Statt idxuse=testidx(~out); könnte man doch gleich im Schritt vorher auf Ungleichheit testen?
Und: es sieht hier erstmal so aus, als ob die for-Schleife das schnellste wäre. 0,03 s sind doch nicht sooo langsam?
Grüße,
Harald
|
|
|
Andy386 |
Themenstarter

Forum-Guru
|
 |
Beiträge: 485
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.1/8
|
 |
|
|
 |
|
Verfasst am: 27.10.2009, 23:15
Titel:
|
 |
Stimmt, da hätte rand(1000,1) gemusst...
Aber das mit b(idx(i)) stimmt so. Ist ein etwas kompliziertes Ding, aber ich brauch das wirklich so... [edit] Im Grunde ist es neu(idx)=a(idx) + b(idx); - nur so, dass ich idx vom ersten zum letzten Element per Hand durchgehe...[/edit]
Zum Negieren: Das war nur aus dem Ansatz "die Stellen suchen, an denen diff(idx) 0 ist" entstanden... Beim letzten hab ichs gleich mit =~ gemacht.
Zu den Testdaten: Die entsprechen nicht so ganz dem Orginal. Ich komme vorr. erst Anfang nächster Woche zum Testen am Zielrechner, hab mir für meinen Laptop nur irgendwas gebastelt.
|
|
|
|
|
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.
|
|