Matlab: supprimer les lignes identiques

Fermé
Lucky2013 Messages postés 1 Date d'inscription mercredi 5 septembre 2012 Statut Membre Dernière intervention 5 septembre 2012 - 5 sept. 2012 à 15:36
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 sept. 2012 à 22:51
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;


3 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 sept. 2012 à 16:10
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)
0
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
0
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.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 sept. 2012 à 22:51
je te conseil alors de faire des impression pour savoir où le problème se présente et pour quelles valeurs d'indices.
0