我有两个 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]
我有两个 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]
这是一个更简洁的答案:
C = dot(A, B, 2);
您基本上想要行的点积。这是 MATLAB 中的一种矢量化运算,因此比元素乘积比求和运算更有效。
我的 matlab 有点生锈,但试试
D = A .* B;
C = D(:,1) + D(:,2);
第一个操作将生成一个 4x2 矩阵,其中包含来自 A 和 B 的相应元素的乘积,而第二个操作将来自同一行的乘积相加。
您正在寻找的结果也是矩阵产品的对角线元素,因此您可以使用
C = diag(A * transpose(B));
尽管这对于较大的矩阵来说效率非常低。
Aasmund Eldhuset 大部分是正确的,但我相信最后一行应该是
C = D(:,1) + D(:,2);
因为您想对最后一列中的每一行求和