Index out of bounds in a for loop
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaire
Guillaume
le 3 Oct 2017
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!
Réponses (1)
James Tursa
le 2 Oct 2017
Modifié(e) : James Tursa
le 2 Oct 2017
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 commentaires
Jan
le 3 Oct 2017
@HIRAKJYOTI BASUMATARY: Note that shrinking an array iteratively is not efficient. James' vectorized version is much nicer and faster.
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!