A
是MxK
矩阵,B
是大小为K
的向量,C
是KxN
矩阵。我应该用什么样的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中实现这一点?
答案 0 :(得分:3)
首先计算D = diag(B)*C
,然后使用适当的BLAS矩阵乘法来计算A*D
。
您可以使用diag(B)*C
元素的循环实现B
并调用相应的BLAS标量乘法例程。