Index out of bounds in a for loop

1 vue (au cours des 30 derniers jours)
HIRAKJYOTI BASUMATARY
HIRAKJYOTI BASUMATARY le 2 Oct 2017
Commenté : Guillaume le 3 Oct 2017
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
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!

Connectez-vous pour commenter.

Réponses (1)

James Tursa
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
HIRAKJYOTI BASUMATARY
HIRAKJYOTI BASUMATARY le 3 Oct 2017
thanks a lot sir. i solved the code using while loop . But , thanks a lot for the information. I will definitely keep it in mind
Jan
Jan le 3 Oct 2017
@HIRAKJYOTI BASUMATARY: Note that shrinking an array iteratively is not efficient. James' vectorized version is much nicer and faster.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Tags

Aucun tag saisi pour le moment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by