2014-10-08 113 views
-1
A = ones(4,4,4); 
b = [1,2,3,4]; 

我希望以这样的方式与B乘以A,乘张量矢量

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

+0

你举的例子不能显示的'A'你乘'B'沿 – 2014-10-08 15:29:55

回答

1

我认为你正在寻找如下:

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

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

Shiftdim确保矢量位于正确的维度。然后bsxfun确保向量得到扩展以匹配矩阵,之后它们可以正确地相乘。

如果你很难理解这个函数,你可能只是想在b的实体上使用一个循环,因为它应该允许你获得这个结果。

+0

+1,我不知道马上我居然回答几乎相同,哪些是你自己的尺寸,仅使用'置换'而不是'shiftdim'。我会保持它的参考=) – 2014-10-08 14:46:07

+0

这完全回答了这个问题,我已经使用bsxfun,但shiftdim命令使我能够乘以正确的维度,非常感谢。 – Jens 2014-10-09 15:37:47

0

除了Dennis' answer,你可以结合permutebsxfun这样的:

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

permuteb,使其沿着第三维位于维度,bsxfun确保尺寸做的时候匹配乘法。

我意识到你可能需要调整它以适应你的需求。因此,如果您很难理解bsxfun,permute,shiftdim等等是如何工作的,不要关心性能,也不打算按照它应该使用的方式使用MATLAB ......您可以始终使用循环来实现。

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