将 BLAS 中的三个矩阵相乘,中间一个是对角线

dzh*_*lil 5 c blas matrix-multiplication

A是一个MxK矩阵,B是一个大小为 的向量K,并且C是一个KxN矩阵。我应该使用哪组 BLAS 运算符来计算下面的矩阵?

M = A*diag(B)*C
Run Code Online (Sandbox Code Playgroud)

实现这一点的一种方法是使用三个 for 循环,如下所示

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);
Run Code Online (Sandbox Code Playgroud)

为了获得更好的速度效率,是否真的值得在 BLAS 中实现它?

Ste*_*non 4

首先计算D = diag(B)*C,然后使用适当的 BLAS 矩阵乘法来计算A*D

您可以diag(B)*C使用循环遍历元素B并调用适当的 BLAS 标量乘法例程来实现。

  • 当其中一个矩阵是对角矩阵时,矩阵-矩阵和矩阵-向量乘法没有优化例程吗?那真是难以置信。 (12认同)