如何在没有循环的情况下有效地将Matlab中的两个矩阵序列相乘?

时间:2017-01-29 10:25:49

标签: matlab matrix gpu

我有两个矩阵组

A1, A2... Ai  N x K
B1, B2... Bi  K x M

我想获得矩阵C = [A1 * B1; A2 * B2; ... Ai * Bi]; 可以在没有循环的Matlab中完成吗? 我可以有效地使用GPU进行此操作吗?

2 个答案:

答案 0 :(得分:1)

另一种解决方案(因为你可以隐含地论证cellfun种循环:使用

这一事实
  

[A1 * B1,A2 * B2,...,Ai * Bi] = [A1,A2,...,Ai] * blkdiag(B1,B2,...,Bi)

(或者,blkdiag(A1,...,Ai)*[B1,...,Bi])。

如果固定数量(i),你可以直接这样写。如果没有并且您拥有它们,请在Ai = A(:,:,i)Bi = B(:,:,i)的3-D矩阵中说AN x K x iB为{{1}然后你可以做

K x M x i

答案 1 :(得分:0)

对GPU使用pagefun,它使用比循环快得多的批处理操作。