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