【问题标题】:Sum and multiply matrices of different size对不同大小的矩阵求和和相乘
【发布时间】:2018-09-01 10:38:30
【问题描述】:

我在 Matlab 中有两个矩阵:大小为 GxMA 和大小为 DxMB。我想创建一个矩阵C,大小为GxD,这样C(g,d)=sum(A(g,:).*B(d,:))/M

让我用一个例子更好地解释一下

clear
A=[1  2  3;
   4  5  6;
   7  8  9;
   10 11 12]; %GxM

B=[14 15 16;
   17 18 19]; %DxM

G=size(A,1);
D=size(B,1);
M=size(A,2);

矩阵C可以得到如下:

C=zeros(G,D);
for g=1:G
    for d=1:D
        C(g,d)=sum(A(g,:).*B(d,:))/M;
    end
end

我想避免这种双重循环,因为我的代码涉及更大维度的矩阵。你能推荐一些矢量化的东西吗?

【问题讨论】:

    标签: matlab matrix vectorization


    【解决方案1】:

    您可以使用极端形式的矢量化,因为您所拥有的基本上是矩阵乘积。为了看到这一点,请考虑

    C(i,j) = sum_k A(i,k)*B(j,k)/M = 1/M * sum_k A(i,k)*B(j,k),
    

    所以将B 的转置定义为Bt 我们有

    C(i,j) = 1/M * sum_k A(i,k) * Bt(k,j)
    

    根据定义,总和是矩阵乘积A * Bt(i,j) 元素。换句话说,你需要的是

    C = (A * B.')/M;
    

    使用您的示例输入并根据上述计算C2

    >> C
    
    C =
    
       30.6667   36.6667
       75.6667   90.6667
      120.6667  144.6667
      165.6667  198.6667
    
    >> C2
    
    C2 =
    
       30.6667   36.6667
       75.6667   90.6667
      120.6667  144.6667
      165.6667  198.6667
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-12
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2013-12-20
      相关资源
      最近更新 更多