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   -
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

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  2. Lucky2013
     
    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
  3. Lucky2013
     
    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
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      je te conseil alors de faire des impression pour savoir où le problème se présente et pour quelles valeurs d'indices.
      0