【问题标题】:Multiplying each element of a vector with a matrix将向量的每个元素与矩阵相乘
【发布时间】:2012-10-12 14:07:09
【问题描述】:

我有一个向量 v 和一个矩阵 M。我想将 v 的每个元素与 M 相乘,然后将所有结果矩阵相加。

for i=1:length(v)
    lala(:,:,i) = v(i).*M;
end
sum(lala, 3)

是否可以在没有 for 循环的情况下执行此操作?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我认为 Daniel Asotsky 的回答是正确的。他在这里利用了操作的线性。我只是想给出另一个解决方案,使用不依赖于这个线性属性的 Kronecker 张量积,因此仍然可以与 sum 以外的操作一起使用:

    kvM = kron(v,M);
    result = sum(reshape(kvM,[size(M) numel(v)]),3)
    

    在我当地时间已经太晚了,我不想解释为什么这个工作的细节,如果你不能从 matlab 帮助和维基百科中弄清楚,那么在下面评论,我会为你解释。

    【讨论】:

      【解决方案2】:

      您是否有不依赖于 i 的单个矩阵 M? 在这种情况下 sum(v(i) * M) = sum(v(i)) *M。

      例如,您将得到代码的预期结果:

      v_sum = sum(v);
      lala_sum = v_sum * M;
      

      【讨论】:

      • M 似乎只是一个数值矩阵,而不是矩阵元胞数组或符号矩阵,所以顺便说一句,他问这个问题,M 相对于总和是恒定的,因此你的答案是正确。
      • @Danil 我不敢相信我错过了这么明显的东西。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多