|
|
Zeilen einer Matrix mal Vektor schnell berechnen |
|
Ajax |
Forum-Century
|
|
Beiträge: 176
|
|
|
|
Anmeldedatum: 09.09.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.09.2010, 14:34
Titel: Zeilen einer Matrix mal Vektor schnell berechnen
|
|
Einen wunderschönen guten Tagen wünsche ich! Ich bin neu hier und in Matlab und habe - wie sollte es auch anders sein - gleich mal ein kleines "Problem":
Es geht um die Multiplikation der Zeilen einer Matrix immer mit dem selben Vektor. Mein Code:
Der Code ist durch die for - Schleife sehr langsam. Geht das irgendwie schneller???
Eine Lösung wäre natürlich den Vektor in einer anderen Schleife ebenfalls als Zeilen in eine Matrix zu stecken. Aber auch hierfür habe ich keinen schnellen Code gefunden und nachdem das ganze zusätzlich in weiteren Schleifen steckt, ist die benötigte Zeit für alles noch länger als die ursprüngliche Schleife.
Das ganze Problem wird dadurch erschwert, dass die Matrix "matrix" sehr groß ist.
Vielen Dank im voraus für hilfreiche Kommentare.
Es grüßt
Ajax
edit by denny: Bitte für Code Formatierung nutzen (Button mit dem Aufschrift "Code" über dem Editorfenster). Danke
|
|
|
|
|
lilov |
Forum-Century
|
|
Beiträge: 193
|
|
|
|
Anmeldedatum: 05.05.10
|
|
|
|
Wohnort: Bremerhaven
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.09.2010, 15:27
Titel:
|
|
Hallo Ajax,
kannst du vllt die Größen von der Matrix und von dem Vektor posten?
Gruß,
lilov
|
|
|
Ajax |
Themenstarter
Forum-Century
|
|
Beiträge: 176
|
|
|
|
Anmeldedatum: 09.09.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.09.2010, 15:36
Titel:
|
|
Hallo!
Vielen Dank schon mal für die schnelle Reaktion.
Die Matrix hat eine Größe von [128*10,128*128] = [1280,16384], der Vektor entsprechend [1280,1].
mfg
|
|
|
lilov |
Forum-Century
|
|
Beiträge: 193
|
|
|
|
Anmeldedatum: 05.05.10
|
|
|
|
Wohnort: Bremerhaven
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.09.2010, 16:02
Titel:
|
|
HI:)
es geht sehr schnell über einen kleinen Umweg:
Gruß,
lilov
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 09.09.2010, 16:25
Titel:
|
|
Hallo
falls Matrix nicht so groß ist, kann man auch BSXFUN verwenden
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 09.09.2010, 17:08
Titel:
|
|
Hallo Denny, hallo Ajax,
Auch für große Matrizen is BSXFUN gut geeigent, weil es den Vektor gar nicht erst aufbläht.
Eine andere Methode:
Das weist Matlab nun explizit an den Vektor als Matrix aufzublähen, wie es z.B. auch intern in REPMAT geschehen würde. Wenn man sich aber die Laufzeiten anschaut, scheint der JIT-Compiler in modernen Matlab-Versionen (getestet mit 2008b und 2009a) dies zu erkennen und die temporäre Matrix "v(:,ONES())" gar nicht zu erzeugen!
Gruß, Jan
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 10.09.2010, 07:23
Titel:
|
|
Hallo Jan
Ich dachte mehr, dass BSXFUN die Schleifen verwendet würde.
Zitat: |
Eine andere Methode:
Code:
Das weist Matlab nun explizit an den Vektor als Matrix aufzublähen, wie es z.B. auch intern in REPMAT geschehen würde. Wenn man sich aber die Laufzeiten anschaut, scheint der JIT-Compiler in modernen Matlab-Versionen (getestet mit 2008b und 2009a) dies zu erkennen und die temporäre Matrix "v(:,ONES())" gar nicht zu erzeugen!
Gruß, Jan |
Tolle Idee
|
|
|
Ajax |
Themenstarter
Forum-Century
|
|
Beiträge: 176
|
|
|
|
Anmeldedatum: 09.09.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.09.2010, 07:41
Titel:
|
|
Hi!
Vielen Dank für die vielen Antworten! Ihr habt mir sehr geholfen. Ich werde das gleich alles mal ausprobieren.
mfg
Ajax
PS: @ denny: sorry für die Sache mit dem Code. Jetzt weiß ich Bescheid.
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 10.09.2010, 08:12
Titel:
|
|
Ajax hat Folgendes geschrieben: |
Hi!
PS: @ denny: sorry für die Sache mit dem Code. Jetzt weiß ich Bescheid. |
Macht nichts, es wäre super wenn du das verwendest würdest. Das erleichtert wirklich sehr das Lesen.
|
|
|
|
|
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 - 2024
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.
|
|