3D矢量矩阵乘法

时间:2011-04-15 19:03:07

标签: matlab matrix vector

这让我感到困扰:

假设您有一个包含三层的矩阵。

是否有一种简单的方法可以将此矩阵与三个元素的向量相乘,以便第一层(所有元素)与向量的第一个元素相乘,依此类推......

现在我必须使用一个函数来执行此操作:

function out=fun(matrix,vector)

out=matrix;
for k=1:3
    out(:,:,k)=out(:,:,k)*vector(k);
end

是否有一种有效的方法可以在一行中完成此操作而无需函数?

4 个答案:

答案 0 :(得分:17)

一个非常简洁的解决方案是将reshape vector转换为1乘1乘3矩阵并使用函数BSXFUN执行逐元素乘法(它将根据需要复制尺寸以匹配两个输入参数的大小):

newMatrix = bsxfun(@times,matrix,reshape(vector,[1 1 3]));

答案 1 :(得分:2)

有一个名为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

取决于您希望如何组织矩阵。

答案 2 :(得分:1)

另一种方法是重复矢量以按大小匹配矩阵:

out = out.*shiftdim(repmat(vector(:),[1 size(out(:,:,1))]),1)

答案 3 :(得分: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;