向量化 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)
我有以下设置
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)