Index out of bounds in a for loop
2 次查看(过去 30 天)
显示 更早的评论
I am trying to loop till the length of Ytotal. But inside the loop some of the elements are getting deleted as the conditions are met. So , the length of Ytotal should be adjusted accordingly. But, still i am getting the error "index out of bounds" . Could anyone suggest me where i am wrong. thanks
for aa = 1:length(Ytotal)
if Ytotal(aa) > ymean+yerrorstd;
Ytotal(aa)=[];
x(aa)=[];
else
Ytotal(aa)=Ytotal(aa);
x(aa)=x(aa);
end
end
1 个评论
Guillaume
2017-10-3
Ytotal(aa)=Ytotal(aa);
x(aa)=x(aa);
Are you aware that these two lines don't do anything* and could be omitted? You're just asking matlab to copy something into the same location it came from.
*unless your ytotal and x are instances of a class for which you've redefined subsasgn to perform something other than a straight copy, which would be very evil to do!
回答(1 个)
James Tursa
2017-10-2
编辑:James Tursa
2017-10-2
Run your loop backwards so that the reduced indexing is not a problem (not very efficient btw):
for aa = length(Ytotal):-1:1
Or just eliminate the loop entirely:
idx = Ytotal > ymean + yerrorstd;
Ytotal(idx) = [];
x(idx) = [];
2 个评论
Jan
2017-10-3
@HIRAKJYOTI BASUMATARY: Note that shrinking an array iteratively is not efficient. James' vectorized version is much nicer and faster.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!