這使我困擾了一下:三維矩陣乘法與矢量
假設你有一個三層矩陣。
有一個簡單的方法,以使第一層(所有元素)獲取與向量的第一個元素相乘等三個元素的矢量乘這個矩陣...
現在我有用一個函數來做到這一點是這樣的:
function out=fun(matrix,vector)
out=matrix;
for k=1:3
out(:,:,k)=out(:,:,k)*vector(k);
end
有沒有一種有效的方法來做到這一點的只有一條線路,而不需要一個功能?
這使我困擾了一下:三維矩陣乘法與矢量
假設你有一個三層矩陣。
有一個簡單的方法,以使第一層(所有元素)獲取與向量的第一個元素相乘等三個元素的矢量乘這個矩陣...
現在我有用一個函數來做到這一點是這樣的:
function out=fun(matrix,vector)
out=matrix;
for k=1:3
out(:,:,k)=out(:,:,k)*vector(k);
end
有沒有一種有效的方法來做到這一點的只有一條線路,而不需要一個功能?
有一個叫做repmat
的matlab函數可以幫助你。
M = [1 2 3]
M * repmat([1 2 3], 3,1)
ans =
6 12 18
6 12 18
6 12 18
M = [1 2 3]
M .* repmat([1 2 3], 3,1)
ans =
1 4 9
1 4 9
1 4 9
取決於你想如何組織你的矩陣。
另一種方式是重複矢量按大小矩陣匹配:
out = out.*shiftdim(repmat(vector(:),[1 size(out(:,:,1))]),1)
除了gnovice的answer,你也可以沿着其他維度複製您的載體,做一個直接的元素方式乘法。
A=randn(1000,1000,3);%# this is your matrix
vector=[1,2,3];%# this is your vector
[dim1 dim2 ~]=size(A);
replicatedVector=repmat(reshape(vector,1,1,3),[dim1,dim2,1]);
out=A.*replicatedVector;
正是我想要的,謝謝! – shant 2011-04-15 20:46:18
希望我可以再次爲你提供「rep乞丐」的讚賞:)令人驚訝的是,Jonas和其他人今天也有類似的評論,過去我不得不幾次提醒人們禮節。當問題得到解決後,似乎確實有一批一次性問題提出者拋棄現場。但是,我在這裏沒有足夠長的時間,所以這可能是正常的。 – abcd 2011-04-16 01:02:18
@yoda:是的,看到一次發貼並永不返回的駕車用戶很常見。不能做太多的事情。然而,當我看到一位新用戶提出了一些明智的,寫得很好的問題,對評論給出了很好的反饋,並且通常以積極的態度行事,我認爲這值得*輕輕地*指向一些常見問題,詳細說明更多內部工作的SO。我認爲,如果他們瞭解更多信息,他們可能會更有可能返回,我們需要更多這樣的用戶。 – gnovice 2011-04-16 03:55:49