当前位置:  开发笔记 > 编程语言 > 正文

从两个2d矩阵中获取许多3d矩阵(逐列乘法)

如何解决《从两个2d矩阵中获取许多3d矩阵(逐列乘法)》经验,为你挑选了1个好方法。

有没有循环执行以下操作的更快方法?

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 nxnA和之间使用列方式矩阵乘法来获得矩阵B.然后我需要这种矩阵的矢量化.



1> lhcgeneva..:

您可以完全向量化这种使用repmat,KRON和重塑或使用Divakar的溶液bsxfun,permuterepmat它给你在速度方面的另一个显著的改善.

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倍.但是,正如下面的评论中所讨论的那样,加速通常取决于矩阵的大小和任务执行的次数.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有