三维矩阵乘法与矢量
问题描述:
这使我困扰了一下:三维矩阵乘法与矢量
假设你有一个三层矩阵。
有一个简单的方法,以使第一层(所有元素)获取与向量的第一个元素相乘等三个元素的矢量乘这个矩阵...
现在我有用一个函数来做到这一点是这样的:
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