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

Images Discussion :

Intersection de deux tableaux


Sujet :

Images

  1. #1
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut Intersection de deux tableaux
    Bonjour
    Voci mes deux tableaux:
    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
    21
    22
    23
    24
    25
    26
    27
    0	0	0,0392156862745098 
    0	0	0,0442352941176470
    0	0	0,0542745098039215
    0	0	0,0743529411764705
    0	0	0,0843921568627450
    0	0	0,0968627450980392
    0	0	0,0994509803921568
    0	0	0,192941176470588
    0	0	0,212156862745098
    0	0	0,231372549019608
    0	0	0,234980392156863
    0	0	0,285176470588236
    0	0	0,295215686274510
    0	0	0,300235294117647
    0	0	0,310274509803922
    0	0	0,327450980392157
    0	0	0,355450980392157
    0	0	0,380549019607843
    0	0	0,430745098039216
    0	0	0,435764705882353
    0	0	0,435764705882353
    0	0	0,455843137254902
    0	0	0,500392156862745
    0	0	0,541176470588235
    0	0	0,615686274509804
    0	0	0,807843137254903
    0	0	1
    B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0	0	0,0392156862745098
    0	0	0,541176470588235
    0	0	1
    quand je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C=intersect(A,B, 'rows');
    j'obtiens que alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    0	0	0,541176470588235
    0	0	0,0392156862745098
    deverait être aussi dans la liste ???????????

  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 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 : 53 166
    Points
    53 166
    Par défaut
    Si je recopie exactement les valeurs que tu nous donnes, le code fonctionne parfaitement :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    A = [0    0    0.0392156862745098 
    0    0    0.0442352941176470
    0    0    0.0542745098039215
    0    0    0.0743529411764705
    0    0    0.0843921568627450
    0    0    0.0968627450980392
    0    0    0.0994509803921568
    0    0    0.192941176470588
    0    0    0.212156862745098
    0    0    0.231372549019608
    0    0    0.234980392156863
    0    0    0.285176470588236
    0    0    0.295215686274510
    0    0    0.300235294117647
    0    0    0.310274509803922
    0    0    0.327450980392157
    0    0    0.355450980392157
    0    0    0.380549019607843
    0    0    0.430745098039216
    0    0    0.435764705882353
    0    0    0.435764705882353
    0    0    0.455843137254902
    0    0    0.500392156862745
    0    0    0.541176470588235
    0    0    0.615686274509804
    0    0    0.807843137254903
    0    0    1];
     
    B = [0    0    0.0392156862745098
    0    0    0.541176470588235
    0    0    1];
     
    C = intersect(A,B, 'rows');
    donne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> C
     
    C =
     
             0         0    0.0392
             0         0    0.5412
             0         0    1.0000
    Maintenant, je présume que les valeurs que tu nous montres sont tronquées.
    Ce qui renvoi à ce problème => Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?

    Ce qui revient à modifier légèrement les valeurs de A comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A = [0    0    0.0392156862745097 
    ...
    0    0    0.541176470588236
    ...
    0    0    1];
    Dans ce cas, on a bien :
    Il faut alors tenir compte d'une tolérance (comme le préconise la FAQ).

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for n = 1:size(B,1)
        tmp = bsxfun(@minus,A,B(n,:));
        idx(n) = find(all(abs(tmp)<1E-6,2));
    end
     
    C = A(idx,:);
    Si seules la troisième colonne de A et de B varie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for n = 1:size(B,1)
        tmp = bsxfun(@minus,A(:,3),B(n,3));
        idx(n) = find(abs(tmp)<1E-6)
    end
     
    C = A(idx,:);
    Ce qui donne dans les deux cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C =
     
             0         0    0.0392
             0         0    0.5412
             0         0    1.0000
    C'est l'idée.
    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)

Discussions similaires

  1. intersection de deux tableaux
    Par bobemile dans le forum 4D
    Réponses: 4
    Dernier message: 25/10/2012, 02h01
  2. Réponses: 2
    Dernier message: 13/07/2009, 02h42
  3. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  4. Réponses: 4
    Dernier message: 06/06/2007, 15h48
  5. [prg jeux ]Définir l'intersection de deux rectangles
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 30/07/2003, 18h11

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