有没有循环执行以下操作的更快方法?
n = 2; m = 1000; A = rand(n,m); B = rand(n,m); C = zeros(n*n,m); for i = 1 : m tmp = A(:,i) * B(:,i)'; C(:,i) = tmp(:); end
基本上我需要m
nxn
在A
和之间使用列方式矩阵乘法来获得矩阵B
.然后我需要这种矩阵的矢量化.
您可以完全向量化这种使用repmat,KRON和重塑或使用Divakar的溶液bsxfun
,permute
和repmat
它给你在速度方面的另一个显著的改善.
tic for j = 1:1000 A1 = repmat(A, n, 1); B1 = kron(B,ones(n,1)); D = reshape(A1(:).*B1(:), n*n, m); end toc
经过的时间是0.117396秒.
tic for j = 1:1000 C = zeros(n*n,m); for i = 1 : m tmp = A(:,i) * B(:,i)'; C(:,i) = tmp(:); end end toc
经过的时间是5.751179秒.
所以,加速大约是50倍.但是,正如下面的评论中所讨论的那样,加速通常取决于矩阵的大小和任务执行的次数.