求和与不同大小的矩阵相乘

时间:2018-09-01 10:38:31

标签: matlab matrix vectorization

我在Matlab中有两个矩阵:大小为A的{​​{1}}和大小为GxM的{​​{1}}。我想创建一个B大小为DxM的矩阵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);

我想避免这种双重循环,因为我的代码涉及尺寸更大的矩阵。你能建议矢量化吗?

1 个答案:

答案 0 :(得分:4)

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

var deflect = () => { 
ball_velocity_a = number_a >= 600 ? -ball_velocity_a : ball_velocity_a;
ball_velocity_b = number_b >= 600 ? -ball_velocity_b : ball_velocity_b;
};

因此将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) 的{​​{1}}元素。换句话说,您需要的是

(i,j)

使用示例输入并根据上述内容计算A * Bt

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