optimization - 帮助优化 matlab 中的 for 循环

标签 optimization matlab

我有一个由 1 和 0 组成的 1×N double 组。我想将所有 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,因此处理列向量会更快。

关于optimization - 帮助优化 matlab 中的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754027/

相关文章:

matlab - 在 Matlab 中,什么时候 Ctrl+C 不起作用,为什么?

assembly - 这个 sqrt 近似内联汇编函数如何工作?

python - 选择要求解的变量(使用 fsolve 查找 Python 根)

image - 如何在 MATLAB 中在 RGB565 和 RGB24 图像格式之间进行转换?

matlab - 如何使用掩模去除图像的噪声

Matlab 多态性

java - 为什么在使用 sharedPreferences 时应该对字符串进行硬编码?

Android M startActivity 电池优化

MongoDB 查询超时

matlab - VLFeat - 如何修复 "Warning: Name is nonexistent or not a directory"?