![]() |
帮助优化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.