Pregunta

A es una matriz MxK, B es un vector de tamaño K, y C es una matriz KxN. ¿Qué conjunto de operadores BLAS debo usar para calcular la matriz a continuación?

M = A*diag(B)*C

Una forma de implementar esto sería el uso de tres bucles, como a continuación

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);

¿Es realmente vale la pena implementar esto en BLAS con el fin de obtener una mejor eficiencia de velocidad?

¿Fue útil?

Solución

Primera D = diag(B)*C cálculo, a continuación, utilizar los BLAS apropiadas matriz se multiplican a A*D de cálculo.

Se puede aplicar diag(B)*C usando un bucle sobre elementos de B y llamando a la rutina escalar multiplicación BLAS apropiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top