Multiplicando tres matrices en BLAS con el del medio siendo diagonal
-
30-09-2019 - |
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?
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