I einige Produkte in der Form zu berechnen haben A'A
oder allgemeinere A'DA
, wo A
eine allgemeine mxn
Matrix ist und D
ist eine diagonale Matrix mxm
. Beide sind voller Rang; d.h. rank(A)=min(m,n)
.BLAS Matrix durch transponierte Matrix Multiply
Ich weiß, dass Sie eine erhebliche Zeit sparen können, ist solche symmetrische Produkte: vorausgesetzt, dass A'A
symmetrisch ist, müssen Sie nur den unteren - oder oberen - diagonalen Teil der Produktmatrix berechnen. Dies addiert sich zu n(n+1)/2
zu berechnenden Einträgen, was in etwa der Hälfte des typischen n^2
für große Matrizen entspricht.
Dies ist eine große Einsparung, die ich ausnutzen möchte, und ich weiß, dass ich die Matrix-Matrix-Multiplikation innerhalb einer for
Schleife implementieren kann. Bisher habe ich jedoch BLAS verwendet, was viel schneller ist als jede andere for
Schleifenimplementierung, die ich selbst schreiben könnte, da sie die Cache- und Speicherverwaltung optimiert.
Gibt es eine Möglichkeit, A'A
oder sogar A'DA
mithilfe von BLAS effizient zu berechnen? Danke!
Super, gute Idee. Vielen Dank! – enanone