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 :

Aide réalisation code


Sujet :

MATLAB

  1. #1
    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 Aide réalisation code
    Bonjour à tous,

    J'ai souvent eu besoin de vous pour corriger mon code ou l'améliorer, mais là je me suis fixé une tache qui me laisse un peu perplexe pour mon niveau.

    Laissez moi vous expliquer un peu les choses, j'ai une interface GUI qui réalise un graphique, et qui prend à la base en Input une matrice C de 1803 * 10000 élements qui représente des séries temporelles entre 2008 et 2014.

    Nom : matrice_exemple.PNG
Affichages : 63
Taille : 43,3 Ko

    Comme vous pouvez le voir il y a un certain nombre de 0 qui correspondent à des années sans valeurs.

    Par exemple pour 2008 je n'ai que 1500 colonnes sans 0
    Pour 2009 je n'ai que 3000 colones sans valeur manquante
    Pour 2013 que 8000 colonnes ...

    Et je veux que l'utilisateur rentre un pérmiètre par exemple 2008-2010 que le gui le récupère (ça je sais faire) et qu'ensuite il réduise la taille de la matrice aux seuls colonnes non nulles de 2008 à 2010

    Quelque chose de la sorte :

    Nom : IMG_2353.JPG
Affichages : 70
Taille : 1,61 Mo

    Alors je ne sais pas ce qui est le plus rapide, travailler sur les dates ? Dire qu'une année est 252 jours ouvrés ? Faire une boucle qui compte le nombre de 0 et supprime la colonne ...

    J'ai pas vraiment d'idée de comment commencer alors je voulais savoir si vous avez une idée de l'achitecture du code à réaliser ?

    Merci d'avance pour vos conseils

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    je comprend pas trop ce que tu veux faire exactement (traits rouges sur ton dessins)
    mais quelque piste déjà

    soit M ta matrice

    1/ commences par filtrer la période désirée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idxPeriode = M(:,1)>= date_debut & M(:,1)<=date_fin;
    Mperiode = M(idxPeriode ,:);

    2/ensuite si tu veux filtrer les colonnes toujours nulles sur la période
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idxNul = all(Mperiode==0);
    Mfiltre = Mperiode(:,~idxNul );
    ou si tu veux filtrer les colonnes contenant au moins zéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idxNul = any(Mperiode==0);
    Mfiltre = Mperiode(:,~idxNul );
    ou si tu veux filtrer les colonnes contenant au moins 30 zéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idxNul = sum(Mperiode==0)>=30;
    Mfiltre = Mperiode(:,~idxNul );
    je te conseilles d'ailleurs de plutôt utiliser NaN que zéro pour identifier des données manquantes (auquel cas tu as la fonction isnan plutot que le test à 0)
    après tout zero est en général une valeur valide (mais peut être pas dans ton cas particulier)

    tout ce que j'ai écris est basé sur l'indexage logique

    Fabien

  3. #3
    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
    Merci pour ta réponse,

    En fait ce qu'il y a en rouge sur mon dessin à gauche, correspond aux données disponibles de 2010 à 2013, là où je suis certain que toutes les données sont disponibles pour cette période sans rencontrer de 0.

    En fait les zéros c'est moi qui les aient mises dans le traitement de donnée, si il y un 0 il y'en a 252 autres car toute l'année est considérée comme nulle.

    Je devais utiliser zéro car je fais un moment des pondérations de ces valeurs, par exemple 0.1*Colonne1+0.9*colonne10 et si colonne 10 est NaN j'ai ma pondération qui est NaN alors que dans mon cas ça ne derange pas si ça renvoi 0.1*Colonne1.

    Je regarde les codes que tu m'as donnée et je reviens.

  4. #4
    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
    J'ai pris ton code comme base de travail et tu m'as fais gagner énormement de temps merci beaucoup

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/05/2006, 17h03
  2. [VBA] Aide pour code
    Par Virgile59 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 14h16
  3. [Mail] Besoin d'aide sur code email avec PJ
    Par flysurfer dans le forum Langage
    Réponses: 1
    Dernier message: 23/02/2006, 10h52
  4. besoin d'aide sur code Block
    Par Antalus dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 31/01/2006, 18h38
  5. Remplissage de TStringGrid à l'aide du code
    Par the watcher dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/10/2005, 16h16

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