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);
等
答案 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之外,您还可以将permute
和bsxfun
合并为:
bsxfun(@times, A, permute(b,[3 1 2]))
permute
移动b
的维度,使其位于第三维度,bsxfun
确保维度在进行乘法时匹配。
我意识到您可能需要调整它以使其符合您的需求。因此,如果您很难理解bsxfun
,permute
,shiftdim
等的工作原理,请不要关心性能,也不要打算使用MATLAB它应该被使用......你总是可以使用循环来做到这一点。
C = zeros(size(A));
for ii = 1:numel(b)
C(:,:,ii) = A(:,:,ii)*b(ii);
end