MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   帮助优化MATLAB中的for循环 (https://www.labfans.com/bbs/showthread.php?t=23377)

poster 2019-12-10 20:41

帮助优化MATLAB中的for循环
 
我有一个由1和0组成的1×N双精度数组。我想将所有1均映射到符号“ -3”和“ 3”,将所有0均映射到符号“ -1”和“ 1”。下面是我的代码。由于我的阵列大约为1 x 800万,因此需要花费很长时间。如何加快速度?

[row,ll] = size(Data); sym_zero = -1; sym_one = -3; for loop = 1 : row if Data(loop,1) == 0 Data2(loop,1) = sym_zero; if sym_zero == -1 sym_zero = 1; else sym_zero = -1; end else Data2(loop,1) = sym_one; if sym_one == -3 sym_zero = 3; else sym_zero = -3; end end end

[B]回答:[/B]

这是一个[B]非常重要的[/B] MATLAB优化技巧。

[B]预分配! [/B]

通过简单的预分配,您的代码[B]会[/B]更快。只需添加

Data2 = zeros(size(Data)); for loop = 1: row ... 在您的for循环之前。

在我的[I]计算机[/I]预分配[B]代码[/B]终止0.322s ,和你原来的代码仍然在运行。我删除了原始解决方案,因为您的优化非常快:)。

另外,由于我们在谈论MATLAB,因此处理列向量的速度更快。



[url=https://stackoverflow.com/questions/2754027]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:04

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.