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 :

execution conditionnelle simplifiable?


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Par défaut execution conditionnelle simplifiable?
    Bonjour,
    j'ai un vecteur T1 de grandes dimensions (>100 et variable selon l'itération). J'aimerais utiliser ce vecteur si et seulement si il contient plus de 2 valeurs finis.
    J'ai écrit ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if Jack==1
          listeSpec1=[];
                    for altTest = 21:41
                        for lamSPEC=1:1416
                            T1 = squeeze(Y(altTest,lamSPEC,:));
                                 if numel(isfinite(T1)==1)>=2
                                     JackSpec1=Jack(T1);                 
                                     listeSpec1=[listeSpec1,JackSpec1];
                                 end
                        end
                    end
    end
    Y a t'il un moyen de simplifier cela?

  2. #2
    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
    La condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if numel(isfinite(T1)==1)>=2
    peut s'écrire plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if sum(isfinite(T1))>=2

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Par défaut
    Merci Dut,
    c'est vrai que c'est plus joli mais ça ne me fait pas gagner de temps de calcul.
    Existe t'il une possibilité d'écrire quelquechose du style "si au moins 2 valeurs sont finis..." avec any par exemple?
    Peut être est-il inutile d'essayer de gagner du temps de calcul sur cette condition?

  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
    Tu peux enlever le SQUEEZE comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if Jack==1
        listeSpec1=[];
        for altTest = 21:41
            for lamSPEC=1:1416
                T1 = Y(altTest,lamSPEC,:);
                if sum(isfinite(T1(:)))>=2
                    listeSpec1=
    [listeSpec1,Jack(T1(:))];
                end
            end
        end
    end
    Ensuite, pour optimiser le code, il faut préallouer la mémoire pour listeSpec1 avant la double boucle FOR-END
    => : Qu'est-ce que la préallocation de mémoire ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Par défaut
    Merci,
    le problème pour la préallocation de mémoire est que je ne connais pas la taille définitive de listeSPEC1. Donc je ne peux pas préallouer!
    Tes corrections me conviennent, je t'en remercie

  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
    Citation Envoyé par cpalperou Voir le message
    le problème pour la préallocation de mémoire est que je ne connais pas la taille définitive de listeSPEC1. Donc je ne peux pas préallouer!
    Tu ne connais pas sa taille réelle... mais tu peux très certainement déterminer sa taille maximale...

    Il te suffit donc de créer listeSPEC1 avec sa taille maximale théorique en le remplissant de 0 et de ne conserver ensuite que les lignes/colonnes contenant des valeurs différentes de 0.

Discussions similaires

  1. Execution conditionnelle de requetes SELECT
    Par TotorLeCastor dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 17/05/2010, 09h50
  2. Execution conditionnelle sans créer de macro
    Par RemiBousquet dans le forum Macro
    Réponses: 5
    Dernier message: 25/11/2009, 08h36
  3. Réponses: 16
    Dernier message: 12/09/2009, 17h36
  4. Réponses: 9
    Dernier message: 17/06/2009, 20h29
  5. execution conditionnelle au démarrage
    Par lastrecrue dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 08/09/2006, 21h40

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