我正在编写一些 matlab 代码并编写了一个有效的算法,但我认为它不是特别有效。由于我正在努力提高我的编程技能,我想知道是否有更有效的方法来做到这一点。
我有一个(相当大的~E07)值矩阵,这些值是无序的,但在 [-100, 100] 范围内。我想使用以下规则在第一个矩阵的基础上创建第二个矩阵:
- 如果该点的值 > 70,则该点的值应设置为 70。
- 如果该点的值 < -70,则该点的值应设置为 -70。
- 所有其他值应四舍五入到最接近的 5 倍数。
这是我目前正在做的事情:
data = 100*(-1+2*rand(1,10000000)); % create random dataset for stackoverflow
new_data = zeros(1,length(data));
for i = 1:length(data)
if (data(i) > 70)
new_data(i) = 70;
elseif (data(i) < -70)
new_data(i) = -70;
else
new_data(i) = round(data(i)/5.0)*5.0;
end
end
有没有更有效的方法?我认为应该有一种方法可以使用逻辑索引来做到这一点,但这些对我来说是一个新发现......