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 deux matrices [Débutant]


Sujet :

MATLAB

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut Comparaison de deux matrices
    bonjour tout le monde

    j'ai deux matrices que je souhaiterais comparer par ligne pour pouvoir garder que celles qui m'interessent, elles sont de tailles differentes en nombre de lignes et de colonnes

    voilà le debut de mes deux matrices

    M =



    1.0e+003 *



    2.0050 0.0010 0.0010 0.0100 0.0107

    2.0050 0.0010 0.0020 0.0100 0.0125

    2.0050 0.0010 0.0030 0.0110 0.0121

    2.0050 0.0010 0.0040 0.0150 0.0156

    2.0050 0.0010 0.0050 0.0130 0.0126

    2.0050 0.0010 0.0060 0.0300 0.0288

    2.0050 0.0010 0.0070 0.0150 0.0152

    2.0050 0.0010 0.0080 0.0110 0.0144

    2.0050 0.0010 0.0090 0.0160 0.0162

    2.0050 0.0010 0.0100 0.0170 0.0187

    2.0050 0.0010 0.0110 NaN 0.0138

    2.0050 0.0010 0.0120 0.0220 0.0224

    2.0050 0.0010 0.0130 0.0270 0.0244

    2.0050 0.0010 0.0140 0.0250 0.0237

    2.0050 0.0010 0.0150 0.0290 0.0287

    2.0050 0.0010 0.0160 0.0120 0.0141

    2.0050 0.0010 0.0170 0.0270 0.0238

    2.0050 0.0010 0.0180 NaN 0.0168

    2.0050 0.0010 0.0190 NaN 0.0120

    2.0050 0.0010 0.0200 0.0110 0.0111

    OT440 =



    1.0e+003 *



    2.0050 0.0010 0.0010 0.0002

    2.0050 0.0010 0.0040 0.0007

    2.0050 0.0010 0.0050 0.0009

    2.0050 0.0010 0.0060 0.0026

    2.0050 0.0010 0.0070 0.0010

    2.0050 0.0010 0.0080 0.0008

    2.0050 0.0010 0.0090 0.0013

    2.0050 0.0010 0.0120 0.0028

    2.0050 0.0010 0.0130 0.0009

    2.0050 0.0010 0.0150 0.0005

    2.0050 0.0010 0.0180 0.0005

    2.0050 0.0010 0.0190 0.0002

    2.0050 0.0010 0.0210 0.0002

    2.0050 0.0010 0.0220 0.0016

    2.0050 0.0010 0.0230 0.0010

    2.0050 0.0010 0.0240 0.0006

    2.0050 0.0010 0.0250 0.0009

    2.0050 0.0010 0.0260 0.0009

    2.0050 0.0010 0.0300 0.0010

    2.0050 0.0010 0.0310 0.0006
    l'idée est de comparer les trois premieres colonnes de chaque matrice et de ne garder que les lignes de M ou l'on trouve les trois premieres valeurs dans AOT440, (en fait ces trois premieres valeurs sont des dates)

    j'ai essayé avec intersect, setxor, celà me donne les lignes avec les valeurs et non la position de la ligne.

    j'ai du mal avec l'indexation aussi

    est ce que quelqu'un a une idéé

    voilà le debut de mon code


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    clear all;
     
    close all;
     
     
     
    %% CHARGEMENT DES DEUX MATRICES A COMPARER
     
     
     
    load('matrice.mat')%données agoufou 2005 pour AOT440
     
    AOT440;
     
    load ('365 fichiers lus, dernier au 20051231.mat')
     
    MAT;
     
    TABFINAL;
     
    M=MAT(:,1:5) %données Agoufou OMI, valeur cimel et moyenne pavé 3
     
    [x y]=size(MAT);
     
    [n m]=size(AOT440);
     
    %% COMPARAISON DES DEUX MATRICES
     
     
     
    a=M(:,1:3);
     
    b=AOT440(:,1:3);
     
    c=intersect(a,b)
     
     
     
    for n=1:length(b)
     
        for m=1:length(a)
     
        if b(n,:) == a(m,:)
    aprés je bloque

    merci d'avance

  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
    Regarde un peu mieux l'aide de la fonction INTERSECT : tu peux avoir plus que d'un paramètre de sortie.
    [c, ia, ib] = intersect(a, b) also returns column index vectors ia and ib such that c = a(ia) and c = b(ib) (or c = a(ia,: ) and c = b(ib,: )).
    En combinant avec l'option 'rows' tu devrait t'approcher du résultat.
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    merci j'ai reussi à trouver mes numeros de lignes avec ce code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a=M(:,1:3);
     
    b=AOT440(:,1:3);
     
    [c, ia, ib] = intersect(a, b,'rows');
    maintenant je dois affecter dans une nouvelle matrice les lignes que je garde et là ça pose probleme

    voilà le code

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    clear all;
     
    close all;
     
     
     
    %% CHARGEMENT DES DEUX MATRICES A COMPARER
     
     
     
    load('matrice.mat')%données agoufou 2005 pour AOT440
     
    AOT440;
     
    load ('365 fichiers lus, dernier au 20051231.mat')
     
    MAT;
     
    TABFINAL;
     
    M=MAT(:,1:5) %données Agoufou OMI, valeur cimel et moyenne pavé 3..........mat=[M(:,1:3), M(:,5)] sans la valeur cimel
     
    [x y]=size(MAT);
     
    [n m]=size(AOT440);
     
    %% COMPARAISON DES DEUX MATRICES
     
     
     
    %mettre les matrices avec le même nombre de colonnes pour trouver les
     
    %lignes à conserver, valeur donnée par 'ia'
     
    a=M(:,1:3);
     
    b=AOT440(:,1:3);
     
    [c, ia, ib] = intersect(a, b,'rows');
     
     
     
     
     
    ligne=ia'; %ia devient un vecteur
     
    L=length(ligne) %taille du vecteur
     
    agou05=zeros(L,6) %affectation de la nouvelle matrice
     
     
     
    for n=1:L;
     
        agou05(n,:)=M(ligne(n),:);
     
        agou05(n,6)=AOT440(n,4);
     
    end
    et le message d'erreur est le suivant
    ??? Error using ==> unknown

    Subscripted assignment dimension mismatch.



    Error in ==> comparaison at 28

    agou05(n,:)=M(ligne(n),:);
    je comprends pas je cherhce dans tous les sens je vois pas où est l'erreur

    merci

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    c bon j'ai trouvé en insistant

    voilà la fin du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ligne=ia'; %ia devient un vecteur
     
    L=length(ligne) %taille du vecteur
     
     
     
    for n=1:L;
     
        agou05(n,:)=M(ligne(n),:);
     
    end
     
    agou05=[agou05, AOT440(:,4)]

  5. #5
    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 882
    Points
    52 882
    Par défaut
    Ou plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [c, ia, ib] = intersect(M(:,1:3), AOT440(:,1:3),'rows');
    agou05 = M(ia,:);
    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idx = ismember(M(:,1:3),AOT440(:,1:3),'rows');
    agou05 = M(idx,:)
    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)

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

Discussions similaires

  1. comparaison de deux matrices en ocaml
    Par savezoboss dans le forum Caml
    Réponses: 3
    Dernier message: 06/12/2013, 11h00
  2. Erreur de comparaison de deux matrices
    Par proc02 dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 11/05/2013, 16h30
  3. Comparaison de deux matrices de char
    Par proc02 dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 10/05/2013, 15h14
  4. Comparaison de deux matrices logiques
    Par sjunod dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/04/2009, 13h12
  5. Comparaison de deux matrices sans boucle for
    Par zicos dans le forum MATLAB
    Réponses: 8
    Dernier message: 04/05/2007, 18h16

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