帮助优化matlab中的for循环

HH.*_*HH. 3 optimization matlab

我有一个1乘N的双数组,由1和0组成.我想将所有1映射到符号'-3'和'3',所有0映射到符号'-1'和'1'.以下是我的代码.由于我的阵列约为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
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 8

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

预分配!

您的代码一个简单的预分配快得多.只需添加

Data2 = zeros(size(Data));
for loop = 1: row 
...
Run Code Online (Sandbox Code Playgroud)

for循环之前.

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

此外,由于我们讨论的是MATLAB,因此处理列向量的速度更快.