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 :

Indexage logique pour plusieurs valeurs


Sujet :

MATLAB

  1. #1
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut Indexage logique pour plusieurs valeurs
    Re-Bonjour,

    Je vais directement au principal:
    J'ai une matrice qui contient des données de mesure sur plusieurs voies.
    La première colonne contient le numéro de ces voies.

    Afin de sélectionner uniquement la voie qui m'intéresse, j'utilise l'adressage logique.

    Par exemple, voici une matrice que je suis susceptible d'obtenir:
    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
    0	28	1441672620,0210824	0,000001	0,1414214	10000
    0	599	1278546497,2658935	0,0000011	0,1414214	10000
    0	4642	335774749,7943485	0,0000042	0,1414214	10000
    0	12915	122418425,7012337	0,0000116	0,1414214	10000
    1	10	39177417404,53333	0,0000018	0,1414214	500000
    1	28	16804823399,215363	0,0000042	0,1414214	500000
    1	77	17568391492,72756	0,000004	0,1414214	500000
    1	215	7482218624,226707	0,0000094	0,1414214	500000
    1	599	3213962406,6304398	0,000022	0,1414214	500000
    1	12915	117400740,2535161	0,000012	0,1414214	10000
    1	35938	1650088719,355025	0,0000428	0,1414214	500000
    1	100000	1499581805,1341362	0,0000471	0,1414214	500000
    2	28	1488884816,8208032	0,0000009	0,1414214	10000
    2	77	1659333009,404499	0,0000009	0,1414214	10000
    2	215	1676594804,5299823	0,0000008	0,1414214	10000
    2	599	1774315274,950917	0,0000008	0,1414214	10000

    Si je veux sélectionner une seule voie, facile, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Matrice = [mes données];
    Voie = 2; %la voie que je veux sélectionner
    index = (Matrice == Voie); % l'index qui va me permettre de sélectionner uniquement les données qui concernent la Voie 2
    Selection = Matrice(a,:); Selectionne toutes les colonnes dont la voie est la numéro 2
    Par contre, mon problème maintenant c'est quand je veux sélectionner plusieurs voies à la fois.
    Imaginons que je veuille sélectionner la voie 2 et la voie 0 en même temps.

    "Voie = [0 2]" va me faire planter la ligne "index = (Matrice == Voie); % l'index qui va me permettre de sélectionner "

    Comment je peux faire alors?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Points : 52 952
    Points
    52 952
    Par défaut
    Regarde la fonction ISMEMBER

  3. #3
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    Nickel ! Merci beaucoup

    J'ai maintenant un dernier problème:
    Je trace des courbes en fonction des voies que j'ai sélectionnées, la 2eme colonne en abscisse, et la 3eme colonne en ordonnée.

    Par exemple, si je sélectionne les voies 1 et 2, je veux que soient tracées les 2 courbes, l'une correspondant à la voie 1, l'autre à la voie 2.

    J'arrive déjà à tracer "une" courbe qui réunit les valeurs des 2 voies (via l'index de ISMEMBER). Ce qu'il faudrait, ce serait de différentier les 2 courbes et les afficher avec 2 couleurs différentes sur le même graphe.
    Est-ce possible?

    Voilà mon code actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                index = ismember(data,a);
                loglog(uAxes,data(index,2),data(index,3));
    uAxes correspond au Handler de mes axes, data est la matrice que j'indexe.

    Voilà l'illustration de la chose:

    1 seule voie d'affichée
    Nom : noprob.JPG
Affichages : 99
Taille : 23,7 Ko

    Si je selectionne plusieurs voies, les données sont prises pour 1 seule courbe:
    Nom : prob.jpg
Affichages : 82
Taille : 25,4 Ko

  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 317
    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 317
    Points : 52 952
    Points
    52 952
    Par défaut
    Dans ce cas, il faut le faire en deux fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    index = data==a(1);
    h(1)=loglog(uAxes,data(index,2),data(index,3));
    hold on
    index = data==a(2);
    h(2)=loglog(uAxes,data(index,2),data(index,3));
     
    set(h(1),'color','r'); 
    set(h(2),'color','g');

  5. #5
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    Okay, mais le problème est que a est un tableau dont les valeurs changent, je ne peux pas coder ca en dur.
    Ta solution ne s'applique uniquement pour la sélection des voies 1 et 2, mais si je veux aussi afficher la voie 0 ca ne marchera pas.
    Il faudrait que je trace autant de courbes que le nombre d'éléments de a.

    Je crois que j'entrevois une solution, je reviens

  6. #6
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    Voilà, j'ai trouvé une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(size(a)==1) %si on ne selectionne qu'une courbe à afficher
         hold off; %on veut ne garder qu'une seule courbe affichée
    end
    for i=1:size(a) %on balaye toutes les valeurs de a
         index= data ==a(i); %index temporaire
         z(i)=loglog(uAxes,data(index,2),data(index,3)) %on trace la courbe...
         hold on; % ... et on la garde en mémoire pour ajouter les suivantes
    end
    Je parcours le tableau et j'ajoute les courbes au fur et à mesure.
    Par contre elles sont toutes bleues, comment je peux faire pour changer leur couleur à chaque itération?

  7. #7
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    Trouvé encore: en mettant "hold all;" au lieu de "hold on;", ca cycle les couleurs

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/11/2012, 12h26
  2. Réponses: 3
    Dernier message: 19/06/2011, 14h54
  3. un indicateur pour plusieurs valeurs séquencées
    Par lou-d dans le forum LabVIEW
    Réponses: 3
    Dernier message: 29/07/2010, 14h19
  4. Indexage logique pour plusieurs valeurs
    Par Dam2227 dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/06/2007, 15h48
  5. Quel resultat avec un group by pour plusieurs valeurs?
    Par sampq dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/12/2005, 13h08

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