Aller au contenu

Trier selon la 1ère colonne MATLAB


bidjoss

Messages recommandés

Bonjour,

J'ai un tableau de taille 600x3 et je souhaiterais le trier selon la première colonne par ordre croissant, c'est à dire que si l'élément (i,1) est le plus petit élément de la colonne 1 alors la première ligne de mon tableau trié sera composée des éléments (i,1) (i,2) (i,3)...

Et ainsi de suite pour les autres lignes.

(J'espère que c'est assez clair)

Je programme sous MATLAB.

Ca fait 24h que je me retourne le cerveau mais la je craque un peu!

Merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

Je crois que ce sont les fonctions sort et gsort qui permettent de trier une matrice.

[s,k]=gsort(a,'lr','i')

trie les lignes de la matrice a dans l'ordre lexical croissant. s est obtenue par une permutation des lignes de la matrice a (donnée par le vecteur k) de telle manière que les lignes de s vérifient s(i,:) > s(j,:) si i<j.

gsort a plus de propriétés, comme le support des %nan et %inf, ce qui est souvent pratique.

Lien vers le commentaire
Partager sur d’autres sites

Je crois que ce sont les fonctions sort et gsort qui permettent de trier une matrice.

[s,k]=gsort(a,'lr','i')

trie les lignes de la matrice a dans l'ordre lexical croissant. s est obtenue par une permutation des lignes de la matrice a (donnée par le vecteur k) de telle manière que les lignes de s vérifient s(i,:) > s(j,:) si i<j.

gsort a plus de propriétés, comme le support des %nan et %inf, ce qui est souvent pratique.

Merci de la réponse mais ca ne fonctionne pas!

gsort n'est pas une fonction MATLAB

Quant à sort, il trie selon tous les éléments de la matrice et ce n'est pas ce que je recherche.

J'ai essayé ceci mais j'ai un problème de dimension :

[N1bisbis,P1bisbis]=size(E1bisbis); E1bisbis est la matrice à trier selon la 1ère colonne

E1biscol=E1bisbis(:,1);

for i=(1:N1bisbis)

E1biscol(i,2)=i;

end

k=0;

i=1;

for i=(1:N1bisbis)

for j=(1:N1bisbis-i)

if E1biscol(j,1)==min(E1biscol(:,1)) %%%%%%%%PROBLEMES DE DIMENSIONS%%%%%%%%

k=k+1;

E1fin(k,:)=E1bisbis(E1biscol(j,2));

E1biscol(j,:)=[];

i=i+1;

end

end

end

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...