|
|
Matrix punktweise potenzieren und multiplizieren |
|
hadez |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.8
|
 |
|
|
 |
|
Verfasst am: 08.03.2011, 23:55
Titel: Matrix punktweise potenzieren und multiplizieren
|
 |
hi, ich habe eine n x k Matrix H, und zwei n-dimensionale Spaltenvektoren a und b. Nun möchte ich jede Spalte der Matrix erstmal punktweise mit den Einträgen in b multiplizieren und dann jede Spalte punktweise mit a multiplizieren. Ich habe das mit folgendem Code gemacht:
Laut profiler dauert dies sehr lange, was glaub ich am Erstellen der ones-Matrizen liegt. Kann man das beschleunigen?
vg hadez
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 09.03.2011, 02:38
Titel: Re: Matrix punktweise potenzieren und multiplizieren
|
 |
Hallo hadez
POWER(H,b) ist aber einfach teuer und wird auch innerhalb von BSXFUN nicht rasend schnell werden.
Gruß, Jan
|
|
|
hadez |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.8
|
 |
|
|
 |
|
Verfasst am: 09.03.2011, 16:04
Titel:
|
 |
hallo jan,
danke für deinen vorschlag, aber der dauert nochmal doppelt so lange wie meine variante...
vielleicht lässt sich das ja auch anders lösen. eigentlich geht es um folgendes:
in H sind ja k spaltenvektoren gespeichert. nun nöchte ich von jedem vektor eine spezielle norm berechnen: jeder eintrag soll halt mit einem einer festen zahl (gespeicht in den zeilen von b) potenziert werden und dann mal der zahlen in a multiplizert werden. davon nehm ich halt am ende noch die spaltensumme mit sum(blabla,1).
mach ichs mir vielleicht zu kompliziert und es gibt nen befehl der das (oder etwas ähnliches) sofort macht?
vg hadez
|
|
|
hadez |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.8
|
 |
|
|
 |
|
Verfasst am: 09.03.2011, 18:30
Titel:
|
 |
ich bin etwas verwirrt. in der matlabhilfe bin ich auf folgendes gestoßen:
Zitat: |
When operating on real (i.e., noncomplex) numbers, it is more efficient to use MATLAB functions that have been designed specifically for real numbers. |
also hab ich den code zu
umgeschrieben. das dauert aber auch länger als das gleiche mit "power". ob ".*" und ".^" oder "times" und "power" benutze macht keinen unterschied.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 09.03.2011, 23:02
Titel:
|
 |
Hallo hadez,
Zitat: |
danke für deinen vorschlag, aber der dauert nochmal doppelt so lange wie meine variante. |
Das ist ja spannend. Normalerweise ist BSXFUN deutlich schneller als die ONES-Methode.
"a * ones(1,k)" ist im Allgemeinen langsamer als "a(:, ones(1, k))", und das gleiche für b.
Bitte gib uns mal ein paar Beispiel-Daten für die Größen und Werte von H, a und b (am besten per RAND, falls möglich). Wenn b z.B. eine Potenz von 2 wäre, ist POWER suboptimal.
Gruß, Jan
|
|
|
hadez |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 27.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.8
|
 |
|
|
 |
|
Verfasst am: 11.03.2011, 00:09
Titel:
|
 |
a(:, ones(1, k)) kannte ich gar nicht. damit gehts minimal schneller. danke für den tipp.
die werte in "H" sind alle positiv, können aber ganz klein und ganz groß sein. die werte in "a" sind alle echt größer als 0, bis jetzt waren sie immer alle kleiner als 1. die werte in "b" liegen im intervall [1,2].
ich hab das heute mal versucht in eine mex-datei zu packen, das läuft auch nur um ein drittel schneller (könnte auch an meienn nicht vorhandenen C kenntnissen liegen). Anscheinend ist potenzieren wirklcih ziemlich aufwändig..
vg hadez
|
|
|
|
|
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.
|
|