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 :

Fonction eval au ralenti


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 63
    Points
    63
    Par défaut Fonction eval au ralenti
    Bonjour,
    Je viens de découvrir une lacune de la fonction eval de Matlab lors du chargement d'un .mat de 500Mo environ.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    load toto.mat % 9.7 sec
     
    cmd=['load toto.mat']
    eval(cmd) %27 sec
    Une idée pour se passer de la fonction eval notamment lors de l'utilisation de uigetfile pour charger un fichier .mat?

    Merci,
    Adrien

  2. #2
    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
    Ceci ne marcherait-il pas ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    file = 'toto.mat';
    load(file);
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  3. #3
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    En effet pourquoi utiliser eval alors que load directement fonctionne?

    Sinon essaie de faire ça juste avant la fonction eval.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clc
    clear all
    tic
    load toto.mat 
    t1=toc
    clear all
    cmd=['load toto.mat'];
    str = regexprep(cmd,'[\f\r'',]+',' ')
    tic
    eval(cmd) 
    t2=toc
    L'idéee ici est d'utiliser les expressions régulières car eval peut être plus lent lorsqu'il est utilisé avec des caractères spéciaux.
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  4. #4
    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 tug83 Voir le message
    En effet pourquoi utiliser eval alors que load directement fonctionne?

    Sinon essaie de faire ça juste avant la fonction eval.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clc
    clear all
    tic
    load toto.mat 
    t1=toc
    clear all
    cmd=['load toto.mat'];
    str = regexprep(cmd,'[\f\r'',]+',' ')
    tic
    eval(cmd) % eval(str) plutôt non ?
    t2=toc
    L'idéee ici est d'utiliser les expressions régulières car eval peut être plus lent lorsqu'il est utilisé avec des caractères spéciaux.
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    Merci.
    J'ai l'habitude d'utiliser eval car j'ai souvent des paramètres que j'inclus avec num2str mais c'est vrai qu'ici, ça n'est pas utile.

  6. #6
    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
    Citation Envoyé par amarion Voir le message
    Merci.
    J'ai l'habitude d'utiliser eval car j'ai souvent des paramètres que j'inclus avec num2str mais c'est vrai qu'ici, ça n'est pas utile.
    Même dans ce cas EVAL n'est a priori pas utile.
    De façon générale il faut éviter d'utiliser cette commande qui ne peut que rendre le code très obscur (en plus éventuellement de le ralentir),
    et c'est quasiment toujours possible de faire autrement (en utilisant la forme fonctionnelle des fonctions.
    Exemple avec LOAD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n=25;
    load(['fichier',num2str(n),'.mat']);
    Règles du Forum

    Adepte de la maïeutique

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 52
    Points
    52
    Par défaut
    mmm eval c'était du temps de MATLAB 4.....
    Maintenant on peut quasiment s'en passer. Peut être à part dans les programmes compilés

  8. #8
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par Antonin08 Voir le message
    mmm eval c'était du temps de MATLAB 4.....
    Maintenant on peut quasiment s'en passer. Peut être à part dans les programmes compilés
    A lire: Evading Eval

    ainsi que:
    1103 - What Is the EVAL Function, When Should I Use It, and How Can I Avoid It?
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

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

Discussions similaires

  1. Fonction eval en java ?
    Par ramislebob dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 00h22
  2. Parsage avec la fonction eval
    Par alain31tl dans le forum Langage
    Réponses: 12
    Dernier message: 23/11/2005, 15h27
  3. Simuler la fonction eval
    Par topwl dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/08/2005, 01h44
  4. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42

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