查看单个帖子
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 帮助优化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

回答:

这是一个非常重要的 MATLAB优化技巧。

预分配!

通过简单的预分配,您的代码更快。只需添加

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

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

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



更多&回答...
poster 当前离线   回复时引用此帖