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à?

È stato utile?

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
scroll top