poster
2019-12-10, 20:41
我有一个由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,因此处理列向量的速度更快。
更多&回答... (https://stackoverflow.com/questions/2754027)
[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,因此处理列向量的速度更快。
更多&回答... (https://stackoverflow.com/questions/2754027)