矢量化2D 3D矩阵产品以加速

时间:2015-10-21 22:24:14

标签: performance matlab matrix vectorization matrix-multiplication

我有以下设置

matrix2D_1 = zeros(40,191);
matrix2D_2 = zeros(40,191);
matrix3D_1 = zeros(40,191,191);
for j = 1:40
    for jw = 1:191
        matrix2D_1(j,jw)  = sum(squeeze(matrix3D_1(j,jw,:))'*matrix2D_2' );
    end
end

所以我希望3D矩阵的第三维的所有乘积的总和与第一个2D矩阵的元素的对应,这是

中的矩阵乘积
squeeze(matrix3D_1(j,jw,:))'*matrix2D_2'

然后将这些结果的总和存储在第一个2D矩阵中。 因为我必须在一个大循环中运行它,所以我的代码需要花费最多的时间。我无法理解如何以更优雅的方式对其进行矢量化。任何更快的解决方案都会受到高度赞赏....

1 个答案:

答案 0 :(得分:1)

烨!使用matrix-multiplicationreshape魔法 -

M = size(matrix2D_1,2);
matrix2D_1 = reshape(sum(reshape(matrix3D_1,[],M)*matrix2D_2.',2),[],M)

sum然后执行matrix-multiplication -

matrix2D_1 = reshape(reshape(matrix3D_1,[],M)*sum(matrix2D_2,1).',[],M)