IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

trier une matrice


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut trier une matrice
    Bonjour
    j'ai une matrice M de n ligne et 2 colonnes la première colonne contient des intensités et la deuxième contient leur position dans une autre image ,je désire trier ma matrice de la manière suivante:
    1.trier les intensités en ordre décroissant :cela veut dire trier les lignes mais en conservant pour chaque intensités M(i,1) l'information de position M(i;2) ce qui veut dire déplacer une ligne i au dessus d'une autre j si l'intensité de la ligne i est supérieure à celle de j
    j'ai essayer la fonction 'sort' mais je perd les information contenu de la deuxième colonne
    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    M= 
    55     2
    454   55
    45    78
    le résultat désiré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    M=
    454 55
    55   2
    45   78
    avec sort j'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    M=
    454  78
    55   55 
    45   2

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Il te faut utiliser SORT uniquement sur la 1ère colonne, récupérer les indices (2ème argument de sortie), puis appliquer ces indices sur ton tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [idx,idx] = sort(M(:,1),'descend');
    res = M(idx,:);
    devrait fonctionner (non testé)

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Il te faut utiliser SORT uniquement sur la 1ère colonne, récupérer les indices (2ème argument de sortie), puis appliquer ces indices sur ton tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [idx,idx] = sort(M(:,1),'descend');
    res = M(idx,:);
    devrait fonctionner (non testé)
    Merci beaucoup Caroline ça marche bien

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Il serait plus judicieux d'utiliser SORTROWS ici.

    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M = [2 2 ; 1 3 ; 2 1 ; 2 3]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [idx,idx] = sort(M(:,1),'descend');
    res = M(idx,:)
    renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    res =
    
         2     2
         2     1
         2     3
         1     3
    Alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res = sortrows(M);
    res = res(end:-1:1,:)
    renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    res =
     
         2     3
         2     2
         2     1
         1     3

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme Trier une matrice (à compléter)
    Par mino77 dans le forum Débuter
    Réponses: 2
    Dernier message: 12/11/2009, 13h53
  2. [Tableaux] Trier une matrice
    Par Guillomme dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2007, 17h56
  3. Réponses: 7
    Dernier message: 13/09/2007, 15h22
  4. Trier une matrice 2D
    Par dj.motte dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/06/2007, 09h47
  5. Trier une matrice 2D
    Par dj.motte dans le forum C
    Réponses: 1
    Dernier message: 26/06/2007, 07h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo