WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

[Performance] Diagonale eines Matrixprodukts

 

HP7289

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 11:32     Titel: [Performance] Diagonale eines Matrixprodukts
  Antworten mit Zitat      
Hallo,

mir geht es hier um Effizienz im Code. Mathematisch gesehen habe ich folgendes:

A und B sind relle m\times n-Matrizen. Ich möchte nun einen Vektor v haben, so dass v_i = a_i^T\cdot b_i, wobei a_i die i-te Spalte von A bezeichnet. Es gilt also (jetzt in MATLAB-Notation):

Code:


Nun ist n sehr groß. Ich habe nicht genug Speicher für A^T\cdot B. Dieser Ausdruck enthielte eh zu viele unnötige Berechnungen. Eine Schleife will ich auf jeden Fall vermeiden. Bis jetzt ist mir aber noch keine Lösung eingefallen, die nur mit MATLAB-Funktionen auskommt. Hat jemand eine Idee?


HP7289

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 11:57     Titel:
  Antworten mit Zitat      
Manchmal sieht man den Wald vor lauter Bäumen nicht. Hab gerade festgestellt, dass

Code:
v = dot(A,B)


genau das macht. Hat sich also erledigt.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.03.2013, 19:05     Titel:
  Antworten mit Zitat      
Hallo HP7289,

Im Allgemeinen ist A*B schneller als dot(A,B).
Und für A'*B wird oft nicht einmal die Transponierte explizit gebildet. Dazu muss dies in einer funktion stehen, damit Matlab's JIT-Accelerator dies ausnutzen kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 12:46     Titel:
  Antworten mit Zitat      
die schnellste Lösung wäre:

v = sum(A.*B',2);
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.