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);
等
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);
等
我认为你正在寻找如下:
A = ones(4,4,4);
B = 1:4;
C = shiftdim(B,-1);
bsxfun(@times,A,C)
Shiftdim
确保矢量位于正确的维度。然后bsxfun
确保向量得到扩展以匹配矩阵,之后它们可以正确地相乘。
如果你很难理解这个函数,你可能只是想在b
的实体上使用一个循环,因为它应该允许你获得这个结果。
+1,我不知道马上我居然回答几乎相同,哪些是你自己的尺寸,仅使用'置换'而不是'shiftdim'。我会保持它的参考=) – 2014-10-08 14:46:07
这完全回答了这个问题,我已经使用bsxfun,但shiftdim命令使我能够乘以正确的维度,非常感谢。 – Jens 2014-10-09 15:37:47
除了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
你举的例子不能显示的'A'你乘'B'沿 – 2014-10-08 15:29:55