Sim*_*mon 3 matlab matrix vectorization multiplication bsxfun
有没有循环执行以下操作的更快方法?
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倍.但是,正如下面的评论中所讨论的那样,加速通常取决于矩阵的大小和任务执行的次数.
| 归档时间: | 
 | 
| 查看次数: | 68 次 | 
| 最近记录: |