Matlab: supprimer les lignes identiques
Lucky2013
Messages postés
1
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je voudrais savoir comment supprimer les lignes identiques dans une matrice M*N sur Matlab. J'ai commencé à le faire par itération, mais après la première itération, le programme s'arrête.
All_XYOpt=All_XYS;
for i=1:size(All_XYOpt,1);
for j=1:size(All_XYOpt,1);
if All_XYOpt(i,2:8)==All_XYOpt(j,2:8) & i~=j;
All_XYOpt(i,:)=[];
end;
XYS=All_XYOpt;
All_XYOpt=XYS;
end;
end;
Je voudrais savoir comment supprimer les lignes identiques dans une matrice M*N sur Matlab. J'ai commencé à le faire par itération, mais après la première itération, le programme s'arrête.
All_XYOpt=All_XYS;
for i=1:size(All_XYOpt,1);
for j=1:size(All_XYOpt,1);
if All_XYOpt(i,2:8)==All_XYOpt(j,2:8) & i~=j;
All_XYOpt(i,:)=[];
end;
XYS=All_XYOpt;
All_XYOpt=XYS;
end;
end;
3 réponses
-
All_XYOpt=All_XYS; for i=1:size(All_XYOpt,1)-1; for j=i+1:size(All_XYOpt,1); if All_XYOpt(i,2:8)==All_XYOpt(j,2:8) & i~=j; All_XYOpt(j,:)=[]; j=j-1; end; XYS=All_XYOpt; All_XYOpt=XYS; end; end;
Voilà comment je ferais si All_XYOpt(j,:)=[]; redimensionne correctement la matrice. Il ne faut pas oublier de décrémenter l'indice j, sinon tu saute une ligne car après une suppression, la ligne x>j devient x-1 du fait du décalage.
De même il vaut mieux supprimer la ligne j plutôt que i pour éviter de supprimer ta ligne de référence (sachant que tu boucle d'abord sur i avant j) -
Salut,
Merci pour ta réponse. je comprend plus ou moins ce que tu dis. Cependant je supprime la ligne i parce que ce sont les lignes supérieures dont j'ai besoin. Tu as vu que j'ai commencé par la colonne 2 au lieu de 1 (if All_XYOpt(i,2:8)==All_XYOpt(j,2:8), parce que à la colonne 1 il y a une information dont j'ai besoin et elle doit être prise sur les lignes supérieures -
et lorsque j'applique la même erreur se produit.
All_XYOpt=All_XYS;
for i=1:size(All_XYOpt,1)-1;
for j=i+1:size(All_XYOpt,1);
if All_XYOpt(i,2:8)==All_XYOpt(j,2:8) & i~=j;
All_XYOpt(j,:)=[];
j=j-1;
end;
XYS=All_XYOpt;
All_XYOpt=XYS;
end;
end;
et voila le message d'erreur
??? Index exceeds matrix dimensions.