向量化 2D 3D 矩阵乘积以加速

Vectorize 2D 3D matrix product for speedup

我有以下设置

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 矩阵的第 3 个维度的所有乘积与第一个 2D 矩阵的元素的总和,这是

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

然后将这些结果的总和存储在第一个二维矩阵中。 因为我必须在一个大循环中 运行 这在我的代码中花费了最多的时间。我无法理解如何以更优雅的方式对其进行矢量化。任何更快的解决方案将不胜感激....

是啊!使用matrix-multiplication and reshape魔法-

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)