在BLAS中乘以三个矩阵,中间一个是对角线

时间:2010-08-23 13:37:04

标签: c matrix-multiplication blas

AMxK矩阵,B是大小为K的向量,CKxN矩阵。我应该用什么样的BLAS算子来计算下面的矩阵?

M = A*diag(B)*C

实现这一点的一种方法是使用三个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);

为了获得更好的速度效率,实际上是否值得在BLAS中实现这一点?

1 个答案:

答案 0 :(得分:3)

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

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