我有以下设置
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矩阵中。 因为我必须在一个大循环中运行它,所以我的代码需要花费最多的时间。我无法理解如何以更优雅的方式对其进行矢量化。任何更快的解决方案都会受到高度赞赏....
答案 0 :(得分:1)
烨!使用matrix-multiplication
和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)