我在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);
我想避免这种双重循环,因为我的代码涉及尺寸更大的矩阵。你能建议矢量化吗?
答案 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;