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 :

tri sélectif de matrices par rapport à un vecteur [Débutant]


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut tri sélectif de matrices par rapport à un vecteur
    Bonjour
    je dispose d'un vecteur e et d'une Liste de matrices E ayant le même nombre d'éléments.
    Je souhaiterais trier les matrices de E dans l'ordre croissant des éléments de e.

    Exemple :
    je veux obtenir les matrices dans l'ordre suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    E={E{4}, E{2}, E{3}, E{1}}
    J'ai tenté de copier une des solutions présentées dans ce forum en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [N,idx]=sort(e);
    E=E(idx,:);
    mais ça ne marche pas.
    Si vous avez une idée qui pourrait m'aider (identification de permutations, ou autres), ce serait super.
    Merci

  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 830
    Points
    14 830
    Par défaut
    "ça ne marche pas" => c'est-à-dire ? Un message d'erreur pourrait nous aider.

    Une meilleure définition de E aussi. Il s'agit apparemment d'un tableau de cellules puisque tu utilises des crochets, pourrais-tu nous en dire plus (sa taille par exemple).
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    "ça ne marche pas" => c'est-à-dire ? Un message d'erreur pourrait nous aider.
    Ben en fait, il ne se passe rien : les matrices de M sont toujours dans le même ordre.

    Citation Envoyé par Caro-Line Voir le message
    Une meilleure définition de E aussi. Il s'agit apparemment d'un tableau de cellules puisque tu utilises des crochets, pourrais-tu nous en dire plus (sa taille par exemple).
    Alors en fait, E est obtenu à partir des étapes suivantes :
    J'ai une matrice A binaire ayant 100 colonnes et 50 à 80 lignes. Avec la fonction Bwlabel, j'en extrais les différentes composantes connexes que j'enregistre dans la liste E. Mon but est de trier ces composantes connexes par nombre de pixels égaux à 1 croissants. Pour pouvoir utiliser plus tard certaines de ces composantes.
    J'avais pour celà, créer le vecteur dont chaque élément correspond à l'aire de la composante connexe de même indice et souhaitais donc trier comme expliqué dans le premier message.

    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
    16
    function emptyplace(A)
     
    L=bwlabel(A,4);
    l=max(max(L));
    e=zeros(l,1);
    for i=1:l
        E{i}=(bwlabel(A)==i);
        D=E{i};
        stats = regionprops(bwlabel(D),'Area');
        d=stats(1).Area;
    e(i)=d;
    end
     
    [N,idx]=sort(e);
    E=E(idx,:);
    N{1}

  4. #4
    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 830
    Points
    14 830
    Par défaut
    Bon c'est presque trop précis et ça ne répond pas vraiment à la question importante. Mais pas grave.
    En fait E est un tableau de cellules qui doit faire 1*n.

    Je suis donc étonnée qu'il n'y ait pas de messages d'erreur.
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    e=[4 3 2 1];
    E={4 3 2 1};
    [N,idx]=sort(e);
    E=E(idx,:);
    J'obtiens :
    ??? Index exceeds matrix dimensions.
    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    e=[4 3 2 1];
    E={4 3 2 1};
    [N,idx]=sort(e);
    E=E(idx);
    fonctionne bien.
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup
    en effet la deuxième proposition marche très bien.
    En fait je penses que j'avais trop de choses sur ma command window et que je me suis emmêlée les pinceaux avec mes différentes variables : j'ai tout fermé et retesté les différentes étapes et ça fonctionne.
    Je ne suis pas encore trop habituée à matlab (légèrement différent des autres logiciels que je connais et il est plus de 4h du mat chez moi alors bon...)
    merci encore

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

Discussions similaires

  1. [Débutant] Tri une matrice par rapport à un vecteur
    Par linda05 dans le forum MATLAB
    Réponses: 4
    Dernier message: 29/03/2014, 15h48
  2. tri matrice par rapport à une colonne
    Par Amergin dans le forum Caml
    Réponses: 4
    Dernier message: 30/09/2009, 14h59
  3. Réponses: 1
    Dernier message: 19/03/2009, 14h44
  4. Réponses: 18
    Dernier message: 11/02/2009, 17h35
  5. [FLASH 8] Tri d'un dataGrid par rapport à la date
    Par aldo-tlse dans le forum Flash
    Réponses: 4
    Dernier message: 02/12/2005, 17h34

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