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 deux matrices (U et H) en fonction des valeurs de U : Comment faire . SORT seul ne suffit pas.


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Par défaut Trier deux matrices (U et H) en fonction des valeurs de U : Comment faire . SORT seul ne suffit pas.
    Bonjour à tous !

    Je reviens vers vous car je rencontre un nouveau problème.

    Je travaille avec deux matrices : U et H. Ces deux matrices ont les mêmes dimensions.

    Je cherche à trier ligne par ligne les valeurs des deux matrices (H et U) en fonction des valeurs de U.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AVANT TRI
     
    U = 
    5 3 2 4 1 6
    6 3 5 1 2 4
    5 6 1 2 3 4
     
    H = 
    4 5 6 7 8 9
    4 5 6 7 8 9
    4 5 6 7 8 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    APRES TRI
     
    Utri =
    1 2 3 4 5 6
    1 2 3 4 5 6
    1 2 3 4 5 6
     
    Htri = 
    8 6 5 7 4 9
    7 8 5 9 6 4
    6 7 8 9 4 5
    Je réfléchie et réfléchie encore, mais je tourne en rond.
    J'ai pensé à regrouper les deux matrices en une seule :
    U(1,1) U(1,2) U(1,3) U(1,4) ...
    H(1,1) H(1,2) H(1,3) H(1,4) ...
    U(2,1) U(2,2) U(2,3) U(2,4) ...
    H(2,1) H(2,2) H(2,3) H(2,4) ...
    etc. ...


    J'utilise la fonction SORT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    M = sort(U, lig)   % je peux aussi préciser 'ascend' mais c'est la valeur par défaut.
    Mais comment trier les lignes deux par deux ?
    Et comment trier les deux matrices, séparément avec le même critère ...

    J'avoue ne plus avoir d'idée ...Avez-vous des astuces ou une idée de ce que je pourrais faire ?

    Merci d'avance !

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour,

    Tu peux utiliser la 2ème sortie de ta fonction sort qui va te donner la description du réarrangement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Utri,I] = sort(U);
    Htri = H(I)

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Par défaut
    Merci Gooby.

    J'ai essayé ta méthode sur un "échantillon" pour vérifier que j'arrive à obtenir le bon résultat. Mais apparemment, j'ai encore un soucis.

    Avec deux petites matrices A et B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    A = [3 2 1; 2 1 3; 3 1 2];
    B = [1 2 3; 1 2 3; 1 2 3];
     
    for lig = 1:3
    Atri(lig,:) = sort(A(lig,:));
    end
     
    [Atri,I] = sort(A);
    Btri = B(I)
     
    Btri =
     
         1     1     1
         1     1     1
         1     1     1
    Btri ne renvoie pas les bonnes valeurs. Je ne comprends pas trop comment fonctionne . J'ai essayer de décomposer les calculs pour comprendre mais ce n'est pas clair, et je n'ariive pas à comprendre où est mon erreur du coup :/

    Pourrais-tu encore m'aider ? stp

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Par défaut
    Cette commande demande le tri de A par colonne.
    Hors, je dois trier mes matrices par ligne.

    Donc au lieu de travailler avec A et B, je travaille avec A' et B' (matrices transposées de A et B).
    NB : J'ai changé les valeurs de B pour faciliter la lecture des résultas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    A = [3 2 1; 2 1 3; 3 1 2];
    A=A';
    B = [4 5 6; 4 5 6; 4 5 6];
    B=B';
     
    lig = 1;
    while lig <= 3
    Atri(:,lig) = sort(A(:,lig));
    lig = lig+1;
    end
     
    [Atri,I] = sort(A);
    Btri = B(I);
    Btri=Btri'
    Atri=Atri'
    Et là je retombe sur mes résultats ...
    Est-ce que cette façon de faire est cohérente ?

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    Citation Envoyé par linpro.lalaland Voir le message
    Et là je retombe sur mes résultats ...
    Est-ce que cette façon de faire est cohérente ?
    y a la fonction sortrows aussi

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

Discussions similaires

  1. "colorier" une matrice en fonction des valeurs
    Par klodik dans le forum Scilab
    Réponses: 1
    Dernier message: 27/06/2015, 16h00
  2. [Débutant] Séparation d'une matrice en deux en fonction des valeurs de la première colonne.
    Par linpro.lalaland dans le forum MATLAB
    Réponses: 6
    Dernier message: 17/07/2014, 14h51
  3. cocher une case en fonction des valeurs sur plusieurs plages
    Par flyfranky dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 15/11/2007, 10h20
  4. Réponses: 4
    Dernier message: 06/03/2007, 13h35
  5. mettre à jour un dataset en fonction des valeurs qu'il contient ?
    Par isachat666 dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/06/2006, 13h03

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