gpt4 book ai didi

matlab - 如何在 matlab 中加速这个三重循环

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

我在 matlab 中有一个三重嵌套的 for 循环,需要花费大量时间来解决它。您有什么建议可以加快模拟速度吗?这种特定的模拟速度很快,但在实际代码中,“t”有 1000 个元素,A 和 B 有大约 400 个元素。

A = [1,2,3];
B = [1,2];
t=[1:1:4];
or hh = 1:length(t)
for ii = 1:length(A)
T1(ii,hh)=A(ii)*t(hh)
for jj = 1:length(B)
T2(ii,jj,hh)=A(ii)*B(jj)*t(hh)
end
end
end

T1_part=sum(T1);
T2_part1=sum(sum(T2));
T2_part2=T2_part1(:,:);
T_final=T1_part+T2_part2

结果:T_final =

24    48    72    96

最佳答案

尝试将循环替换为:

T1 = A'*t;
T2 = bsxfun(@times, A'*B, permute(t,[3 1 2]));

置换的原因是因为 bsxfun 将沿着单一维度扩展矩阵,所以您需要确保您的矩阵沿着正确的维度扩展。如果你给 bsxfun 一个行向量和一个矩阵,它会尝试对你的行向量和矩阵的每一行进行逐元素乘法。但我们想要的是将整个矩阵与向量的每个元素相乘,但沿着一个新的正交维度。因此 permute 将向量从行向量更改为 3D 向量,从而允许 bsxfun 沿正确的维度扩展。

但是你也应该首先尝试只pre-allocate memory对于 T1T2 使用 zeros,即在循环之前尝试 T2 = zeros(size(A,2), size( B,2), 尺寸(t,2))。使用循环时,您应该始终尽可能预分配。

关于matlab - 如何在 matlab 中加速这个三重循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21402031/

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