Умножая три матрица в BLAS со средним, чем диагональ

StackOverflow https://stackoverflow.com/questions/3548069

  •  30-09-2019
  •  | 
  •  

Вопрос

A является MxK матрица, B это вектор размера K, а также C это KxN матрица Какой набор операторов BLAS должен использовать для вычисления матрицы ниже?

M = A*diag(B)*C

Один из способов реализации этого будет использовать три для петель, как ниже

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

Это на самом деле стоит реализовать это в BLAS, чтобы получить лучшую эффективность скорости?

Это было полезно?

Решение

Первый вычислитель D = diag(B)*C, Затем используйте соответствующие матрицы BLAS-MATRIX, чтобы вычислить A*D.

Вы можете реализовать diag(B)*C используя петлю над элементами B и призывая к соответствующему скалярно-умножению BLAS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top