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 :

Stockage d'indice pour extraire des données d'une matrice


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Stockage d'indice pour extraire des données d'une matrice
    Bonjours tout le monde

    je cherchais de l'aide sur matlab et je suis tombée sur ce forum formidable
    alors, je suis débutante en Matlab (comme tout le monde ) et je galère pour avancer dans mon projet.

    J'ai une matrice de n ligne et 8 colonne; la première colonne contient les coordonnées en longitude des points, la deuxième les latitudes et les 6 autres contiennent les valeurs des paramètres correspondants au point donnée.

    Pour des points fixes PT1, PT2 et PT3 dont je dispose des coordonnées, je dois extraire les valeurs des paramètres.

    Pour bien illustrer ça, en voici un exemple pour une matrice(4,4):
    pour une matrice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    M=[1    6     3     4 
         5    6     7     8
         9    10   11   12 
         5    14   15   16]
    et pour un point PT dont long(PT)=5 et lat(PT)=6; je dois extraire la ligne [5 6 7 8] et la stocker dans un fichier, sachant que 5 et 6 peuvent se répéter dans une même colonne comme dans l'exemple.

    pour cela j'ai essayer de faire ainsi
    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
     
     L=load(nom);
            M= (L);
             [n,p] = size(L);
            long(n,1)=M(n,1);
            lat(n,1)=M(n,2);
            [n,p] = size(L);
            for ki=1:n;
                for kj=1:n;
                if ((long(ki,1)==10.2333) & (lat(kj,1)==36.8439) & (ki==kj))
                    K_TU=ki;
                    disp(K_TU)
                end
                 if ((long(ki,1)==10.7445) & (lat(kj,1)==35.7148) & (ki==kj))
                    K_MO=ki;
                 end
                 if ((long(ki,1)==10.8470) & (lat(kj,1)==33.8029) & (ki==kj))
                    K_JB=ki;
                 end
                 if ((long(ki,1)==11.9460) & (lat(kj,1)==34.3457) & (ki==kj))
                    K_ACHTART=ki;
                 end
                 if ((long(ki,1)==11.5813) & (lat(kj,1)==35.9271) & (ki==kj))
                    K_HAL9=ki;
                 end
                 if ((long(ki,1)==10.2064) & (lat(kj,1)==37.1811) & (ki==kj))
                    K_RAWED=ki;
                 end
                 if ((long(ki,1)==9.7844) & (lat(kj,1)==37.4081) & (ki==kj))
                    K_PT1=ki;
                 end
                 if ((long(ki,1)==10.9094) & (lat(kj,1)==37.0618) & (ki==kj))
                    K_PT2=ki;
                 end
                 if ((long(ki,1)==10.1745) & (lat(kj,1)==34.1465) & (ki==kj))
                    K_PT3=ki;
                 end
                end
    mais juste après lorsque j'utilise l'indice K_TU, je recois l'erreur suivante
    ??? Undefined function or variable "K_TU"
    je vous pris de m'aider car je me bloque depuis un bon moment
    merci

  2. #2
    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 ce 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
     
    M =load(nom);
    % Pour l'exemple :
    %M = [10.2333 36.8439 1 2; 1 2 3 4; 10.7445 35.7148 1 3; 10.8470 33.8029 4 5]
    s = size(M);
     
    % Les valeurs à tourver (j'ai copié-coller 3 lignes ..)
    F = [10.2333 36.8439; 10.7445 35.7148; 10.8470 33.8029]
     
    % Enregister le resultats
    Resultat = [];
     
    % On boucle sur les lignes de F
    for i=1:size(F,1)
        IX = M(:,1) == F(i,1) & M(:,2) == F(i,2);
        if any(IX)  % IX est non vide
            Resultat = [Resultat; M(find(IX,1),:)]; % le find pour prendre une seule ligne
        else % Ligne pas trouvé : on met des zeros
            Resultat = [Resultat; zeros(1,s(2))];
        end
    end
     
    Resultat
    AlloSchool, votre école sur internet.

  3. #3
    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 tutty Voir le message
    Bonjours tout le monde;
    ...
    pour cela j'ai essayer de faire ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     L=load(nom);
     %...
                if ((long(ki,1)==10.2333) & (lat(kj,1)==36.8439) & (ki==kj))
                    K_TU=ki;
                    disp(K_TU)
                end
    Donc si ton test n'est pas vrai, la variable K_TU n'est pas affecté de la valeur ki. Or comme K_TU n'existait pas avant, si le test est faux, la variable n'existe pas du tout.
    D'où ton message d'erreur.

    Sinon je n'ai pas vérifié le code de Mr Samouraï mais il a l'air optimisé par rapport aux possibilités de Matlab
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    SALUT;
    l'idée du code est geniale merci beaucoups; mais ca marche encore pas
    d'abord j'ai compris ma faute de l'aute code; en fait j'ai inversé les colonnes 1 et 2 celui des long et lat
    mais encore, les resultats que j'ai obtenu sont fausse;
    je vous explique d'avantage;
    en fait, j'ai 8 fichiers journalier pour 31 jours, ce qui me fait 248 fichiers que je dois lire automatiquement et extraire a fur et a mesure les données des 9 points dont les coordonnées sont cité ci dessous et mettre dans 9 fichiers 'PT1','PT2'...'PT9' ; donc chacun de ces fichier va contenir a la fin 248 lignes; ce me fera comme resultat final 9 fichiers contenant les données de chacun de ces point pour tout un moi
    je vous met un fichier type en pièce jointe pour prendre une idée;
    mais a part le problème de stockage dans des fichier séparés, les resultats trouvés ne corresponde pas aux valeurs dans le fichier source (en pièce jointe)
    ceci est le code plus complet que l'autre, mais il en manque encore la derniere partie (celle de stockage successifs des données des points dans des dossiers différants)
    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
     
    chem='E:/DATA_ALADIN/Janvier-2007/'
     mounth = num2str('ASCII_200701');
    for in=1:N;
        for jn=0:3:24;
            jour=num2str(in,'%02d');
            heure=num2str(jn,'_%02d');
            filename=[mounth jour heure];
            nom = [chem filename];
            L=load(nom);
            M= (L);
     
       s = size(M);
    % Les valeurs à tourver (j'ai copié-coller 3 lignes ..)
    F = [36.8439 10.2027 ;35.7148 10.7445 ;33.8029 10.847 ;34.3457 11.946 ;35.9271 11.5813 ;37.1811 10.2064 ;37.4081 9.7844 ;37.0618 10.9094 ;34.1465 10.1745 ];
    % Enregister le resultats
    Resultat = [];
    % On boucle sur les lignes de F
    for i=1:size(F,1)
        IX = M(:,1) == F(i,1) & M(:,2) == F(i,2);
        if any(IX)  % IX est non vide
            Resultat = [Resultat; M(find(IX,1),:)]; % le find pour prendre une seule ligne
        end
    end
    Resultat
        end
    end
    return
    Fichiers attachés Fichiers attachés

  5. #5
    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,

    Je viens d'executer le code, les resultats sont bons. Il m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Resultat =
     
      1.0e+005 *
     
        0.0004    0.0001    0.0028    1.0411    0.0000    0.0000    0.0000         0         0         0         0         0
        0.0004    0.0001    0.0028    1.0413    0.0000    0.0000   -0.0000         0         0         0         0         0
        0.0003    0.0001    0.0028    1.0403    0.0000   -0.0000   -0.0000         0         0         0         0         0
        0.0003    0.0001    0.0029    1.0402    0.0000   -0.0000   -0.0000         0         0         0         0         0
        0.0004    0.0001    0.0029    1.0407    0.0000    0.0000   -0.0000         0         0         0         0         0
        0.0004    0.0001    0.0028    1.0409    0.0000    0.0000    0.0000         0         0         0         0         0
        0.0004    0.0001    0.0029    1.0407    0.0000    0.0000    0.0000         0         0         0         0         0
        0.0004    0.0001    0.0029    1.0408    0.0000    0.0000    0.0000         0         0         0         0         0
        0.0003    0.0001    0.0029    1.0409    0.0000   -0.0000   -0.0000         0         0         0         0         0
    Ce qui est bon (oubli pas le 1.0e+005).
    Sinon pour mieux voir le contenu de Resultat double click dessus dans la fenêtre Workspace et il s'ouvrira dans l'Array Editor


    ++
    AlloSchool, votre école sur internet.

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ah oui c'est vrai, merci beaucoup mr_Samourai
    je vais essayer de régler ca par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      fprintf (ffd,%7.4f,.....,C1,C2.....C9)
    mais avant ce la j'arrive pas à régler l'autre problème
    ca fait un moment que j'essaye de changer le code pour le rendre comme je vous ai déja expliquer, c a d chaque ligne s'affiche dans une matrice differente, PT1-->PT9, (et non pas le tout dans la meme matrice Resultat) mais j'arrive pas, il parait que je suis vraiment nul
    comme je vous ai montrer dans le code précédent; j'insère cette boucle dans une autre de lecture de fichier automatique donc pour la première itération, il faut avoir 9 fichier avec une ligne dans chacun et remplir ainsi de suite les 9 fichiers par la première ligne du premier fichier, jusqu'au fichier N°(8*31=248);

    si vous me comprenez, SVP aidez moi, car j'ai vraiment besoin de vous
    merci

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    salut
    merci pour tout j'ai trouvé et j'ai terminé la partie conception de mon projet
    à la prochaine

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

Discussions similaires

  1. Besoin d'aide pour extraire des données d'une feuille à l'autre
    Par fransky dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/11/2010, 15h03
  2. Réponses: 2
    Dernier message: 25/06/2009, 08h23
  3. Réponses: 1
    Dernier message: 07/04/2008, 16h11
  4. comment faire pour extraire des données ?
    Par bernardgiraud dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 31/08/2007, 00h37
  5. [GML] Scripts shell pour extraire des données d'Oracle
    Par diamonds dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 28/09/2006, 07h04

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