Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 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 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



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


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