我有一个由 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/