我试图使用这篇文章中的解决方案:Multiply a 3D matrix with a 2D matrix,用三维向量化一维的乘法,但无济于事。任何帮助将不胜感激!
for s = 1: s_length
for a = 1: a_length
for g = g_length
two_dim(s,a) = two_dim(s,a) + one_dim(g) * three_dim(s,a,g);
end
end
end
答案 0 :(得分:2)
我认为这可以做你想要的。
two_dim = reshape(three_dim, [], size(three_dim,3))*one_dim(:);
two_dim = reshape(two_dim, size(three_dim,1), size(three_dim,2));
其工作原理如下:
答案 1 :(得分:1)
mtimes
不适用于尺寸大于2的输入,因此您必须自己找到一种方法来进行乘法运算。 Luis Mendo的解决方案是一个很好的解决方案;这是另一个使用bsxfun
:
two_dim = two_dim + squeeze(sum(bsxfun(@times, three_dim, reshape(one_dim,[1 1 g_length])),3));
以下是它的工作原理:
reshape
使向量one_dim
看起来像3D数组。这必须这样做,因为矢量和3D数组之间的乘法是沿第三维执行的,所以Matlab需要提示大小。bsxfun
执行逐元素的乘法,因此结果必须沿第三维度(并且被挤压以符合2D矩阵格式)