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 :

[datenum] Optimiser le temps d'exécution


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut [datenum] Optimiser le temps d'exécution
    Bonjour,

    J'ai un problème de temps cpu.

    En effet pour exécuter ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        for i = 1:size(datafile.data{1},1)
            dates(i,1) = datenum(datafile.data{1}{i}(1:19));
        end
    avec size(datafile.data{1},1) = 73834 et datafile.data{1}{i}(1:19) = '07/01/2004 00:12:35' pour i=1, il me faut 2 minutes 28 secondes ce que je trouve énorme.

    Il y a pas un autre moyen car s'il le faut je vais recoder la fonction datenum.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    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
    Par défaut
    Ce code améliore un peu les perfos il me semble (et raccourcit le code ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dchar = char(datafile.data{1});
    dchar=dchar(:,1:19);
    dates=datenum(dchar);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Pas mal tu fais mieux que moi.

    Il faut à ton code 1 min 31 secondes.

    Tu gagnes pour le moment mais je trouve que ça reste encore très long.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Peux-tu nous montrer un exemple d'une donnée contenue dans datafile.data{1} et ce que tu cherches à obtenir avec ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    je veux que '07/01/2004 00:12:35' devienne 7.3213e+005

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    C'est utile l'indexage (1:19) ? Il y a autre chose après ?

    Sinon tu peux essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dates=datenummx(datevec(datafile.data{1}));
    Si ce n'est pas suffisant, il faut optimiser DATEVEC

  7. #7
    Expert confirmé
    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
    Par défaut
    Il n'y a plus qu'à remplacer datenum et en fait dans datenum ce qui prend du temps (en regardant avec le profiler) c'est la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    n = datenummx(datevec(arg1));
    et dans cette ligne c'est datevec.
    Si tu es sûr à 100% de ton format d'entrée, une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dchar = char(datafile.data{1});
    %on remanie en vecteur y m d h m s
    virgule=repmat(',',size(dchar,1),1);
    res=[dchar(:,7:10),virgule,dchar(:,1:2),virgule,dchar(:,4:5),virgule,...
        dchar(:,12:13),virgule,dchar(:,15:16),virgule,dchar(:,18:19)];
    dvec = str2num(res);
    dates=datenummx(dvec);
    Je gagne quelquechose ?

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

Discussions similaires

  1. Optimisation du temps d'exécution
    Par opensource dans le forum SQL
    Réponses: 18
    Dernier message: 18/04/2008, 18h10
  2. optimisation en temps d'exécution d'un tri
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2008, 18h49
  3. Optimisation du temps d'exécution d'une requête
    Par LeNovice dans le forum DB2
    Réponses: 6
    Dernier message: 12/07/2007, 13h47
  4. optimiser le temps d'exécution de l'explorateur windows
    Par ben_iap dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 31/01/2006, 22h04
  5. Réponses: 9
    Dernier message: 20/06/2005, 12h17

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