Matlab: supprimer les lignes identiques
Lucky2013
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 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;
A voir également:
- Matlab: supprimer les lignes identiques
- Gnu octave matlab - Télécharger - Édition & Programmation
- Programmer avec MATLAB ✓ - Forum Matlab
- Termes de Matlab ✓ - Forum Matlab
- Problème diffusion matlab - Forum Matlab
- Boucle for matlab - Forum Matlab
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
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.
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.