2014-10-08 146 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