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 :

Comparaison de vecteurs de taille différentes


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Comparaison de vecteurs de taille différentes
    Bonjour à toutes et à tous

    Voilà, j'ai deux vecteurs-ligne de tailles différentes. Certaines de leurs valeurs respectives sont égales mais pas nécessairement positionnées au même numéro de colonne dans les deux vecteurs.
    Exple: A=[0 1 4 6 8 9]
    B=[1 3 4 5 9 10 15]
    Je voudrais comparer ces deux vecteurs et trouver le nombre de valeurs qu'ils ont en commun.

    Pour le moment mon code ressemble à ça. Les deux vecteurs en question sont XX5 et XX6.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i=1:length(XX5)
        for j=1:length(XX6)
            if XX5(i)==XX6(j) 
                    Milieu=(Fcorr5(i)+Fcorr6(j))/2;
                    plot(Milieu,XX5(i),'Marker','square','Color',[1 0 0],'MarkerFaceColor',[1 0 0],'MarkerSize',2)
            end
        end
    end
    Le problème, c'est que je ne peux pas créer ainsi une matrice 'Milieu' puisque je ne peux connaître sa dimension et ainsi noter 'Milieu(p)' dans la boucle if. Ce qui fait que j'ai une valeur de Milieu à chaque tour de boucle et je suis obligé de faire un hold('all') pour n'obtenir qu'un seul graphe de ces valeurs. Je voudrais pouvoir tracer ce graphe en ressortant de la boucle.

    J'espère que c'est à peu près clair.

    Merci de votre aide

  2. #2
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Pour trouver les nombre commun à A et B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >> C=sort([A B]);
    >> sortC(find(diff(sortC)==0))
     
    ans =
     
         1     4     9
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Ok merci...
    mais comment je peux faire pour repérer les indices de chacun, càd, avec le petit exemple, repérer que la première valeur commune correspond à la colonne 2 du vecteur A et à la colonne 1 du vecteur B, que la seconde valeur commune correspond à la colonne 3 du vecteur A et à la colonne 3 du vecteur B...etc..

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    A=[0 1 4 6 8 9];
    B=[1 3 4 5 9 10 15];
     
    % Pour l'exemple
    Fcorr5 = A; 
    Fcorr6 = B;
     
    [c,ia,ib] = intersect(A,B)
    Milieu = (Fcorr5(ia) + Fcorr6(ib)) / 2
    INTERSECT renvoi les valeurs et les indices .

    ++ bonne chance
    AlloSchool, votre école sur internet.

  5. #5
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Le code suivant fusionne A et B en C, trie C dans sortC, récupère les indice de permutation dans indC.
    Ensuite "indice" est la liste des indice tel que sortC(indice)==sortC(indice+1).
    indiceA contient les indices ou les valeurs de A se retrouvent dans B.
    indiceB contient les indices ou les valeurs de B se retrouvent dans A.

    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
    17
    18
    19
    20
     
    >> A=[0 1 4 6 8 9];
    >> B=[1 3 4 5 9 10 15];
    >> C=[A,B];
    >> [sortC,indC]=sort(C)
    >> indice = find(diff(sortC)==0)
    >> indiceC = sort([indC(indice) indC(indice+1)]);
    >> indiceA=indiceC(indiceC<=length(A));
    >> indiceB=indiceC(indiceC>length(A))-length(A));
    >> A(indiceA)
     
    ans =
     
         1     4     9
     
    >> B(indiceB)
     
    ans =
     
         1     4     9
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Nickel....

    Ca marche très bien

    Merci beaucoup

  7. #7
    Membre éprouvé
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Points : 1 146
    Points
    1 146
    Par défaut
    Bonjour

    Pour trouver les nombre commun à A et B :

    >> C=sort([A B]);
    >> sortC(find(diff(sortC)==0))

    ans =

    1 4 9
    Je vois, si je me trompe pas, que lorsque le vecteur A ou B contient des éléments qui se répètes et malgré que si nous n'avons pas des éléments communs dans ces deux vecteurs votre code va retourner quelque choses ce qui est erroné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A=[1 1 4 6 8 9]
    B=[0 3 7 5 11 10 15]
    C=sort([A B]);
    C(sort(find(diff(C)==0)))
    Si tu trouves ma réponse utile, n'oublies pas de voter pour ce me message

  8. #8
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    je supposait que les éléments de A était unique sinon il faut au préalable faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A=unique(A);
    B=unique(B);
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par LordPeterPan2 Voir le message
    je supposait que les éléments de A était unique sinon il faut au préalable faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A=unique(A);
    B=unique(B);
    Ou plus simplement :



    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C = unique([A(:);B(:)]);
    Ce qui évitera les problèmes d'orientation des vecteurs lors de la concaténation ²
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par Dut Voir le message
    Ou plus simplement :



    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C = unique([A(:);B(:)]);
    Ce qui évitera les problèmes d'orientation des vecteurs lors de la concaténation ²
    Heu .. nan faut pas les concaténer avant d'avoir éliminer les doublons pour chacun des deux ensembles
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par LordPeterPan2 Voir le message
    Heu .. nan faut pas les concaténer avant d'avoir éliminer les doublons pour chacun des deux ensembles
    Ahh ouais... petite boulette ...c'est ça quand on oublie de relire le sujet depuis le début

    C'est sûr que comparer leurs valeurs une fois concaténés, c'est moins pratique
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Dans ma sagesse légendaire je te pardonne
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

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

Discussions similaires

  1. concaténation des vecteurs de tailles différentes
    Par loulitta dans le forum MATLAB
    Réponses: 16
    Dernier message: 15/01/2010, 12h26
  2. Correspondance entre deux vecteurs de taille différente
    Par MisterK dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 31/03/2008, 17h07
  3. Réponses: 2
    Dernier message: 05/02/2008, 11h47
  4. Réponses: 4
    Dernier message: 05/05/2007, 19h12
  5. Réponses: 1
    Dernier message: 29/03/2007, 19h17

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