【问题标题】:3D Matrix multiplication with vector3D 矩阵乘法与向量
【发布时间】:2025-12-28 13:15:12
【问题描述】:

这让我有点困扰:

假设你有一个三层矩阵。

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

现在我必须使用一个函数来做到这一点:

function out=fun(matrix,vector)

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

有没有一种有效的方法可以在不需要函数的情况下仅在一行中执行此操作?

【问题讨论】:

    标签: matlab matrix vector


    【解决方案1】:

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

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

    【讨论】:

    • 希望我能再次为“rep beggar”投票给你 :) 令人惊讶的是,Jonas 和其他人今天也发表了类似的评论,而且过去我不得不提醒人们注意礼仪几次。确实,一旦问题得到解决,似乎有大量的一次性问题提问者会放弃该领域。不过,我来的时间还不够长,所以这实际上可能是正常的。
    • @yoda:是的,经常看到路过的用户发帖一次就再也没有回来。对此无能为力。但是,当我看到一个新用户提出了一些明智的、写得很好的问题、对 cme​​ts 给出了良好的反馈并且通常表现得积极时,我认为值得轻轻地向他们指出一些详细的常见问题解答SO的更多内部工作。我认为如果他们了解更多信息,他们可能更有可能返回,我们需要更多这样的用户。
    • 同意,我喜欢你为他指出正确方向的方式。我要偷那个以备将来使用:)
    【解决方案2】:

    除了 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;
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】: