Moltiplicando tre matrici in BLAS con cui quella centrale è diagonale
-
30-09-2019 - |
Domanda
A
è una matrice MxK
, B
è un vettore di dimensione K
e C
è una matrice KxN
. Che insieme di operatori BLAS devo usare per calcolare la matrice di sotto?
M = A*diag(B)*C
Un modo per implementare questo sarebbe utilizzando tre cicli for come qui di seguito
for (int i=0; i<M; ++i)
for (int j=0; j<N; ++j)
for (int k=0; k<K; ++k)
M(i,j) = A(i,k)*B(k)*C(k,j);
E 'effettivamente la pena l'applicazione del presente in BLAS al fine di ottenere una migliore efficienza di velocità?
Soluzione
Prima calcolo D = diag(B)*C
, quindi utilizzare le BLAS opportune matrice moltiplicare per A*D
calcolo.
È possibile implementare diag(B)*C
utilizzando un ciclo sugli elementi di B
e chiamando al BLAS appropriata scalare-moltiplicazione di routine.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow