【问题标题】:Multiply two matrices element wise with summation将两个矩阵元素与求和相乘
【发布时间】:2016-11-01 06:36:44
【问题描述】:

我有两个 4x2 矩阵。我怎样才能实现这样的乘法:输出应该是一个 4x1 矩阵,其中每个元素是原始矩阵中行中元素的乘积之和。 像这样:

    [1 2;
A =  3 4; 
     5 6;
     7 8]

    [1 2;
B =  3 4; 
     5 6; 
     7 8]

结果 C 矩阵将是:

    [1*1 + 2*2;
C =  3*3 + 4*4;
     5*5 + 6*6;
     7*7 + 8*8]

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这是一个更简洁的答案:

    C = dot(A, B, 2);
    

    您基本上想要行的点积。这是 MATLAB 中的一种向量化运算,因此比元素乘积比求和运算更有效。

    【讨论】:

      【解决方案2】:

      我的 matlab 有点生锈了,但是试试

      D = A .* B;
      C = D(:,1) + D(:,2);
      

      第一个操作将生成一个 4x2 矩阵,其中包含 A 和 B 中相应元素的乘积,而第二个操作将同一行的乘积相加。

      您正在寻找的结果也是矩阵产品的对角线元素,因此您可以使用

      C = diag(A * transpose(B));
      

      虽然这对于较大的矩阵来说效率非常低。

      【讨论】:

      • @Ansari:不错;我不知道sum() 可以以这种方式使用。
      • @Ansari:太好了。这就是我一直在寻找的。您的解决方案适用于任何大小的矩阵。如果您发表评论作为答案,我会将其标记为正确
      • 谢谢@Alkersan - 我用更简洁的方式回答了:)
      【解决方案3】:

      Aasmund Eldhuset 大部分是正确的,但我认为最后一行应该是

          C = D(:,1) + D(:,2);
      

      因为你想对最后一列中的每一行求和

      【讨论】:

      • 道歉。我误读了之前的评论。其实是对的。
      • 实际上,您并没有误读它——大约一分钟后,它实际上是D(1,:) + D(2,:),因为我忘记了Matlab 是行专业还是列专业。然而,像这样的更正应该作为评论发布(或者当你收集到足够的声誉时,你可以自己进行)。 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      相关资源
      最近更新 更多