【问题标题】:How to code this matrix multiplication?如何编码这个矩阵乘法?
【发布时间】:2018-05-08 08:16:00
【问题描述】:

我有两个矩阵:

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

B = A'

乘法应该采用从两者中提取行向量和列向量的方式。
C = B(:,i) * A(i,:) 这样对于第一个实例(第一行和第一列),结果将是:

[1 2; 
 2 4]

这将被垂直总结得到[3 6]。这笔款项将给出最终答案9。同样,如果矩阵大小较大,则为第 2 行和第 2 列、第 3 行和第 3 列等等。

这个最终的标量值将用于比较哪一行及其对应列的产量高。

【问题讨论】:

  • 问题已编辑。最终答案的猜测是正确的 [9; 49; 121]跨度>

标签: matlab matrix vectorization matrix-multiplication


【解决方案1】:

您所需的结果实际上在数学上相当于:

sum(A,2).^2   %or  sum(A,2) .* sum(A,2) 

如果AB 不是相互转置,则:

sum(A,2).* sum(B,1).' 

【讨论】:

  • 二项式!太棒了!
  • 非常聪明..!
  • 你的答案是特殊情况,当第二个矩阵是第一个矩阵的转置时。一般来说,A 和 B 可以不同。无论如何,谢谢你的好主意。
  • @user9003011 它也很容易适应一般情况。查看编辑
【解决方案2】:

你可以使用sum:

result = sum(bsxfun(@times,sum(A,2), B.'),2);

或者在最新版本的 MATLAB 中你可以这样写:

result = sum(sum(A,2).*B.',2)

上一个答案:

你可以使用permute:

result = sum(reshape(permute(A,[2 3 1]) .* permute(A,[3 2 1]),[],size(A,1)));

或者在AB的情况下:

result = sum(reshape(permute(B,[1 3 2]) .* permute(A,[3 2 1]),[],size(A,1)));

result = [9 49 121]

感谢@TommasoBelluzzo 和@SardarUsama。

【讨论】:

  • sum(sum(permute(A,[2 3 1]) .* permute(A,[3 2 1])))(:)
  • 如果矩阵大小大于3维会起作用
  • 是的 permute 可以接受多维数组。
  • 结果 = sum(bsxfun(@times,sum(A,2), B.',2));该命令不起作用。错误:输入参数过多(在 Matlab 2017 中)。
【解决方案3】:

如果您的矩阵大小为Nx2,那么一个可能的答案是

A.*A * [1;1] + 2*A(:,1).*A(:,2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2017-03-11
    • 2013-12-23
    • 2015-06-30
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多