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 :

extraire une sous matrice selon les valeurs d'une colonne


Sujet :

MATLAB

  1. #1
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut extraire une sous matrice selon les valeurs d'une colonne
    bonjour

    je cherche a extraire des sous matrice a partir d'une matrice, et ceci selon les valeurs d'une colonnes.
    voila mon exemple:
    matrice:
    X Y T
    2 5 7
    4 1 7
    0 2 7
    1 2 8
    7 5 8
    3 3 10
    1 0 11
    je cherche une façon d'extraire les matrices qui ont la même valeurs T pour obtenir:
    sous matrcie1:
    X Y T
    2 5 7
    4 1 7
    0 2 7
    sous matrcie2:
    X Y T
    1 2 8
    7 5 8
    sous matrcie3:
    X Y T
    3 3 10
    sous matrcie4:
    X Y T
    1 0 11

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    regarde find dans la doc de matlab, je pense que tu pourras résoudre ton problème avec ceci.

    => ou au pire tu fais une boucle en faisant un teste sur la ligne "i" de ta colonne 3

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (matrice(i,3)==7)
    %sauvegarderLigne()
    else
    %
    end

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 95
    Points : 150
    Points
    150
    Par défaut
    Je suis pas sur que ce serait le plus rapide mais moi je ferais deux boucles for imbriquées,
    -la première qui lit ta valeur de T et la compare avec une matrice des valeurs déja utilisées que tu complètes au fur et à mesure (pour éviter les doublons)
    -une boucle for dans celle ci qui te permet, avec le fonction find, de remplir chaque sous matrice avec les lignes ayant la valeur T définie pour cette boucle for. Tu peux aussi remplacer cette boucle par le code fourni par 21did21, je ne sais pas si elle est plus rapide


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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    hello
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sousmatrice = {};
    for i=unique(matrice(:,3).')
     sousmatrice{end+1} =  matrice(matrice(:,3)==i,:);
    end
    fab

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 95
    Points : 150
    Points
    150
    Par défaut
    Merci le fab, je ne connaissait pas cette fonction "unique", cela va bien m'alléger des programmes

  6. #6
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par le fab Voir le message
    hello
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sousmatrice = {};
    for i=unique(matrice(:,3).')
     sousmatrice{end+1} =  matrice(matrice(:,3)==i,:);
    end
    fab
    Merci le fab

  7. #7
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Bonsoir
    j'ai une autre question

    maintenant j'ai un tableau de cellules "sousmatrices" sous cette forme:
    sousmatrices:
    par exemple cellule1:
    t x y
    2 45 92
    2 27 73
    2 17 73
    2 87 40

    cellule2:
    t x y
    3 61 93
    3 79 91
    je veux créer deux autre matrices x y selon la valeur de t. Tel que:
    X:
    t1 t2 t3
    0 45 61
    0 27 79
    0 17 0
    0 87 0
    et Y:
    X:
    t1 t2 t3
    0 92 93
    0 73 91
    0 73 0
    0 40 0
    voila j'ai essaye ceci mais il me semble qu'il y a une erreur:
    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
    X=zeros(m,n);
    Y=zeros(m,n);
    %m= nombre de t dans notre cas m= 3 (1, 2, et 3)
    %n=4
    for i=1:m
        for l=1: length( sousmatrice)
            g= sousmatrice{l}
     
            for j=1:n
                p=g(1,1); %pour récupérer le numéro de t
                X(p,j)=g(2,j);
                Y(p,j)=g(2,j);
            end
        end
    end

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pour commencer, pour m=3 et n=4, X et Y sont des tableaux 3x4 et non 4x3 comme tu nous montres, tu as de même inversé tes indices dans les boucles.

    Ensuite, la boucle for selon i est inutile.

    Chaque sous-matrice étant de taille différente, il faut que tu adaptes le parcours de j en conséquence.

  9. #9
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    C'est vrai, merci.
    Mais comment j'adapte le parcours de j ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Tu le rends dépendant de la taille de g.
    Dernière modification par Invité ; 17/09/2012 à 00h12.

  11. #11
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    bonjour
    voila, le code corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    X=zeros(4,3);
    Y=zeros(4,3);
        for l=1: length( sousmatrice)
            g= sousmatrice{l};
            [b a]= size(g);
            for j=1:b
                p=g(1,1); %pour récupérer le numéro de t
                X(j,p)=g(j,2);
                Y(j,p)=g(j,3);
            end
        end

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/04/2013, 23h10
  2. Réponses: 4
    Dernier message: 21/07/2011, 15h25
  3. Réponses: 5
    Dernier message: 25/01/2011, 19h01
  4. Réponses: 1
    Dernier message: 08/11/2010, 13h07
  5. Créations de table selon les valeurs d'une variable
    Par rocsylcanar dans le forum SAS Base
    Réponses: 9
    Dernier message: 27/05/2009, 12h22

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