Fak*_*DIY 3 matlab loops matrix
我正在写一些matlab代码并编写了一个有效的算法,但我认为它不是特别有效.由于我正在努力提高我的编程技巧,我想知道是否有更有效的方法来做到这一点.
我有一个(相当大的~E07)值矩阵,它们是无序的,但是在[-100,100]范围内.我想通过使用以下规则创建基于第一个矩阵的第二个矩阵:
这是我目前正在做的事情:
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
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?我认为应该有一种方法可以使用逻辑索引来做到这一点,但这些对我来说是一个新的发现......
你根本不需要循环:
data = 100*(-1+2*rand(1,10000000)); % create random dataset for stackoverflow
new_data = zeros(1,length(data)); % note that this memory allocation is not necessary at this point
new_data = round(data/5.0)*5.0;
new_data(data>70) = 70;
new_data(data<-70) = -70;
Run Code Online (Sandbox Code Playgroud)
小智 5
更容易使用max和min.用一个简单的方法做.
new_data = round(5*max(-70,min(70,data)))/5;
Run Code Online (Sandbox Code Playgroud)