[英]3D Matrix multiplication with vector
這讓我感到困擾:
假設你有一個有三層的矩陣。
是否有一種簡單的方法將此矩陣與三個元素的向量相乘,以便第一層(所有元素)與向量的第一個元素相乘,依此類推......
現在我必須使用一個函數來這樣做:
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的答案之外 ,您還可以沿着其他維度復制矢量並進行直接的元素乘法運算。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.