|
|
for Schleifen durch Matrixoperationen ersetzen |
|
fabbes |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.09.2011, 16:12
Titel: for Schleifen durch Matrixoperationen ersetzen
|
 |
Hi,
ich habe ein Problem. Und zwar soll ich folgenden Code möglichst ohne for-schleifen realisieren. Es geht dabei um die Erstellung einer Matrix Z welche die Häufigkeitsverteilung der gemeinsamen Ergeignisse von X und Y darstellen soll.
Wär super wenn jemand eine Idee hätte! Vielen Dank. Gruß
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.09.2011, 18:42
Titel: Re: for Schleifen durch Matrixoperationen ersetzen
|
 |
Hallo fabbes,
Wieso möchtest Du dies denn ohne FOR-Schleifen implementieren?
Möchtest Du es beschleunigen? Dazu wären aber FOR-Schleifen manchmal die bessere Wahl. Um das in Deinem Fall entscheiden zu können, ist es notwendig den Typ und die Dimension der Variablen zu kennen.
Ich würde auf alle Fälle den Namen "power" vermeiden, weil das eine eingebaute Funktion ist, die danach nicht mehr aufgerufen werden kann.
Gruß, Jan
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.09.2011, 18:52
Titel: Re: for Schleifen durch Matrixoperationen ersetzen
|
 |
Hallo fabbes,
Ich fange schon mal mit ein paar Ideen an:
Aber wie wäre es gleich das zweite und dritte Ausgabe-Argument von UNIQUE zu benutzen?
Gruß, Jan
|
|
|
fabbes |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.09.2011, 12:00
Titel:
|
 |
Hallo Jan,
vielen Dank schon mal für die schnelle Hilfe. Den Tipp bzgl. power hab ich direkt mal umgesetzt und der Rest vom Skript funktioniert auch.
Der Grund ist tatsächlich, dass ein Kollege meinte, dass FOR-Schleifen mir das Skript bei größeren Datenmengen unendlich langsam machen würden.
Bei den Daten handelt es sich um Integers (später evtl auch floats..) und werden in Dimensionen von 1000+ bereitstehen..
Gruß Fabian
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 28.09.2011, 12:33
Titel:
|
 |
Hallo fabbes,
Das Gerücht über langsame FOR-Schleifen in Matlab hält sich hartnäckig. Wenn eine vektorisierte Methode aber viel temporären Speicher benötigt, können FOR-Schleifen dank der JIT-Beschleunigung deutlich schneller sein.
Verstehen ich richtig, dass dies realistischen Testdaten wären:
Gruß, Jan
|
|
|
fabbes |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.09.2011, 12:57
Titel:
|
 |
Hi Jan,
ja genau. Allerdings kann die zweite Spalte auch negative Werte enthalten.
Gruß Fabian
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 28.09.2011, 16:57
Titel:
|
 |
Hallo Fabian,
Wenn also negative Werte in der zweiten Spalte stehen können, wie wäre die einzufügen? Natürlich kann ich das auch machen, aber wenn Du mithilfst, ist das motivierender...
Meine Versuche den Code zu vektorisieren benötigen alle mindestens die doppelte Laufzeit. Mit etwas vereinfachten FOR-Schleifen komme ich von 0.0074 sec auf 0.0066:
Aber ist das Ganze nicht einfach ein 2D-Histogramm? Dazu gibt es mehrere Methoden in der FEX: http://www.mathworks.com/matlabcentral/fileexchange/?term=hist2.
HISTC wäre auch eine gute Idee für die einzelnen Spalten.
Gruß, Jan
|
|
|
fabbes |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.09.2011, 15:02
Titel:
|
 |
Hey Jan,
ja im Prinzip ist es schon ein 2-D Histogramm, allerdings finde ich keine Möglichkeit die Matrix power auf die einzelnen Reihen und nicht auf die einzelnen Elemente hin zu untersuchen.
P = [15 3;
13 2;
15 3;
9 4;
13 2]
Ich brauche die Häufigkeiten der einzelnen Reihen:
15 3 = 2
13 2 = 2
9 4 = 1
das ganze müsste ich dann in einem contour diagramm abbilden..
hab schon versucht die einzelnen reihen über mat2cell in einzelne zellen
zu packen. allerdings klappt bei numerischen zellen die unique funktion nicht.. über hist weiss ich auch nicht wie das gehen soll. und als anfänger fehlen mir da ein bisschen die logischen zusammenhänge um eigenständig auf eine lösung zu kommen..
falls dir noch was einfällt kannst du ja gerne schreiben. aber ansonsten erstmal vielen dank.. weil funktionieren tuts ja und ich kanns auch erstmal so stehen lassen!!
gruß fabian
|
|
|
|
|
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.
|
|