乘法张量与向量

时间:2014-10-08 13:36:32

标签: matlab

A = ones(4,4,4);
b = [1,2,3,4];

我希望以这样一种方式将A与b相乘,

ans(:,:,1) == ones(4,4)*b(1);
ans(:,:,2) == ones(4,4)*b(2);

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找以下内容:

 A = ones(4,4,4);
 B = 1:4;

 C = shiftdim(B,-1);
 bsxfun(@times,A,C) 

Shiftdim确保向量放置在正确的维度中。然后bsxfun确保向量展开以匹配矩阵,之后它们可以正确地相乘。

如果您难以理解此功能,您可能只想在b的实体上使用循环,因为这样可以让您获得此结果。

答案 1 :(得分:0)

除了Dennis' answer之外,您还可以将permutebsxfun合并为:

bsxfun(@times, A, permute(b,[3 1 2]))

permute移动b的维度,使其位于第三维度,bsxfun确保维度在进行乘法时匹配。

我意识到您可能需要调整它以使其符合您的需求。因此,如果您很难理解bsxfunpermuteshiftdim等的工作原理,请不要关心性能,也不要打算使用MATLAB它应该被使用......你总是可以使用循环来做到这一点。

C = zeros(size(A));
for ii = 1:numel(b)
   C(:,:,ii) = A(:,:,ii)*b(ii);
end