代码之家  ›  专栏  ›  技术社区  ›  user9003011

如何对这个矩阵乘法进行编码?

  •  6
  • user9003011  · 技术社区  · 7 年前

    我有两个矩阵:

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

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

    [1 2; 
     2 4]
    

    这将垂直汇总以获得 [3 6] . 这个总数将给出最终答案 9 . 同样,第二排&第2列,第3行;如果矩阵大小更大,则第3列以此类推。

    最终的标量值将用于比较哪一行及其对应的列具有较高的成品率。

    3 回复  |  直到 7 年前
        1
  •  8
  •   Sardar Usama    7 年前

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

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

    如果 A B 不是相互转置:

    sum(A,2).* sum(B,1).' 
    
        2
  •  3
  •   rahnema1    7 年前

    您可以使用 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)));
    

    或在以下情况下: A B :

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

    感谢“TommasoBelluzzo”和“SardarUsama”。

        3
  •  2
  •   yar    7 年前

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

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