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 :

vlookup problème de temps de calcul


Sujet :

MATLAB

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Je suis totalement d'accord.
    Et le code ne tourne que partiellement, je comprend pas pourquoi cela écrase les valeurs et reste bloqué à 6.


    Donc pour en revenir à ton message précedent, j'ai lancé le code, et j'obtiens bien effectivement l'ensemble de mes chemins dans une structure 1x1445 cell.

    Après je vais pouvoir les appeler plus facilement comme ceci :

    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
     
     
    for k = 1:numel(chemin_spread2)
     
     
        o = 0;
     
     
        fid = fopen(chemin_spread2{k,:}, 'r');
        M = textscan(fid, '%s %*f', 'TreatAsEmpty', '.', 'HeaderLines', 1);
        fclose(fid);
        formatIn = 'dd/mm/yy';
        J = datenum(M{1},formatIn);
     
        udate = unique([udate ; J]);
     
        o = o+1;
     
        C = NaN(numel(udate), o+1);
        C(:,1) = udate;
     
        o = 1;
     
        fid = fopen(chemin_spread2{k,:}, 'r');
        M = textscan(fid, '%s %f', 'TreatAsEmpty', '.', 'HeaderLines', 1);
        fclose(fid);
     
        formatIn = 'dd/mm/yy';
        J = datenum(M{1},formatIn);
     
        idx = ismember(udate, J);
        o = o+1;
        C(idx,o) = M{1,2};
     
    end

  2. #22
    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
    OK donc maintenant deuxième partie, récupérer les dates uniques :

    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
    udate = [];
    formatIn = 'dd/mm/yy';
     
    for k = 1:numel(chemin_spread2)      
     
        fid = fopen(chemin_spread2{k}, 'r');
        M = textscan(fid, '%s %*f', 'TreatAsEmpty', '.', 'HeaderLines', 1);
        fclose(fid);
     
        J = datenum(M{1}, formatIn);
     
        udate = [udate ; J];
     
    end
     
    udate = unique(udate);
    Le vecteur udate contient-il toutes les dates uniques ?
    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)

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    effectivement, il contient l'ensemble des dates uniques.

    Et donc normalement, en faisant le code suivant, je devrais avoir ce que je cherche :

    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
     
     
    C = NaN(numel(udate),numel(chemin_spread2));
    o = 1;
    C(:,1) = udate;
    for k = 1:numel(chemin_spread2)
        fid = fopen(chemin_spread2{k,:}, 'r');
        M = textscan(fid, '%s %f', 'TreatAsEmpty', '.', 'HeaderLines', 1);
        fclose(fid);
        o=o+1;
        formatIn = 'dd/mm/yy';
        J = datenum(M{1},formatIn);
     
        idx = ismember(udate, J);
     
        C(idx,o) = M{1,2};
     
    end
    Si pour toi le code est bon, chez moi ça à l'air de tourner ça prend à peine 2 minutes VS des heures avant !!! Un énorme merci

  4. #24
    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
    Tu as compris. Pour le reste, tu es le seul à pouvoir vérifier que le résultat final est le bon.

    Pour finir, tu peux améliorer la lisibilité du code en mettant par exemple l'incrémentation de la variable o juste avant de l'utiliser :

    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
    C = NaN(numel(udate),numel(chemin_spread2));
    C(:,1) = udate;
    
    o = 1;
    for k = 1:numel(chemin_spread2)
        
        fid = fopen(chemin_spread2{k}, 'r');
        M = textscan(fid, '%s %f', 'TreatAsEmpty', '.', 'HeaderLines', 1);
        fclose(fid);
    
        formatIn = 'dd/mm/yy';
        J = datenum(M{1},formatIn);
        
        idx = ismember(udate, J);
        
        o = o+1;
        C(idx,o) = M{2};
        
    end
    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. Réponses: 16
    Dernier message: 26/12/2013, 15h52
  2. Réponses: 2
    Dernier message: 05/07/2010, 14h12
  3. Réponses: 0
    Dernier message: 04/08/2008, 17h05
  4. Réponses: 5
    Dernier message: 09/05/2005, 12h24
  5. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12

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