gpt4 book ai didi

matlab - 从两个二维矩阵中获取多个三维矩阵(逐列乘法)

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:57 26 4
gpt4 key购买 nike

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

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 矩阵,在 AB 之间进行列矩阵乘法.然后我需要对此类矩阵进行矢量化。

最佳答案

您可以使用 repmat 完全向量化它, kronreshape或者,将 Divakar 的解决方案与 bsxfunpermuterepmat 一起使用,这会在速度方面带来另一个显着的改进。

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

Elapsed time is 0.117396 seconds.

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

Elapsed time is 5.751179 seconds.

因此,加速大约是 50 倍。然而,正如下面评论中所讨论的,加速比通常取决于矩阵的大小和任务执行的次数。

关于matlab - 从两个二维矩阵中获取多个三维矩阵(逐列乘法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34103985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com