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 :

Gérrer les NaN pour un calcul d'écart type


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 Gérrer les NaN pour un calcul d'écart type
    Hello,

    Je viens vous voir car j'ai un problème.

    Je fais tourner mon code (je sais pas si il est bon)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    T=size(CCBP); %taille de la matrice de donnée 
    ww=1; %départ 
    ws=60; %Taille fenêtre 
    y=1;
    for i=1:T(1) %boucle pour les lignes 
        for j=1:T(2) %boucle pour les colonnes 
            for t=ww:ws:T(1) %boucle pour garder les valeurs comprises dans la fenêtre 
        subspread(y,j)=CCBP(t-ww+1:t,j);
        vol_spread(y,j)=std(subspread(:,j));
                end
            end
             y=y+1;
    end
    Le problème c'est que la matrice en input contient des NaN et donc en output je n'ai pas de calcul, je pourrais faire une interpolation mais ça n'est pas vraiment souhaitable, je souhaites savoir si c'est possible de lui dire, que lorsqu'il y'a un NaN il ne prend pas compte dans le calcul.

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    salut,

    tu as la fonction isnan qui detecte les NaN dans tes vecteur

    petit exemple

    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
     
    A =
     
         1     2     3     4   NaN     6     7   NaN     8     9   NaN
     
    >> ind = isnan(A)
     
    ind =
     
         0     0     0     0     1     0     0     1     0     0     1
     
    >> A(ind) = []
     
    A =
     
         1     2     3     4     6     7     8     9

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Les fonctions nanmean et nanvar calculent ces indicateurs en ignorant les nan.

  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
    nanvar il fallait connaitre ! merci énormément

    Par contre, mon code vous semble bon ? car j'ai la même valeur pour chaque décalage de la fenêtre

    C'est au niveau du subspread que ça bug, je veux que me mette la plage des 60 jours, puis que ça décale d'un jours en gardant 60 jours de fenêtre.

    Donc en gros
    0 - 60
    1 - 61
    2 - 62

    et ainsi de suite

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Je ne comprends pas tes boucles. La boucle sur i semble inutile (tu ne te sers pas de i). la boucle des fenêtres glissantes est toujours la même (j'imagine qu'elle doit commencer en i). En particulier ceci n'a aucun sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for t=ww:ws:T(1) %boucle pour garder les valeurs comprises dans la fenêtre 
        subspread(y,j)=CCBP(t-ww+1:t,j);
    Il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        for j=1:T(2) %boucle pour les colonnes 
             for t=1:T(1) %boucle sur début de fenêtres
            %for t=ww:ws:T(1) % pas besoin de boucle
        subspread(t,j)=CCBP(t-ww+1:t,j);    
                end
            end

  6. #6
    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
    Ok merci j'ai fait ça, et ça tourne et subspread varie à chaque pas.

    Le problème c'est que mon vol_spread lui ne varie pas, je comprend pas pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    T=size(CCBP); %taille de la matrice de donnée 
    ww=60; %départ 
    ws=1; %Taille fenêtre 
    y=1;
     %boucle pour les lignes 
        for j=1:T(2) %boucle pour les colonnes 
            for t=ww:ws:T(1) %boucle pour garder les valeurs comprises dans la fenêtre 
        subspread=CCBP(t-ww+1:t,:);
        vol_spread(y,j)=sqrt(nanvar(subspread(:,j)));
            end
            y=y+1;
        end

  7. #7
    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
    Ce que je ne comprend pas c'est quand je vais au breakpoint j'ai des valeurs de vol_spread qui changent, mais j'ai un problème pour le stockage final des valeurs.

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Tu dois incrémenter y dans la boucle interne et le réinitialiser dans la boucle externe.

    mais en fait, pas besoin de y, il suffit d'écrire sur la ligne y= 1+(t-ww)/ws

  9. #9
    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
    Grand merci c'est parfait !

  10. #10
    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
    Citation Envoyé par Dombrai Voir le message
    salut,

    tu as la fonction isnan qui detecte les NaN dans tes vecteur

    petit exemple

    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
     
    A =
     
         1     2     3     4   NaN     6     7   NaN     8     9   NaN
     
    >> ind = isnan(A)
     
    ind =
     
         0     0     0     0     1     0     0     1     0     0     1
     
    >> A(ind) = []
     
    A =
     
         1     2     3     4     6     7     8     9
    Merci pour ton aide, mais j'ai un matrice de type :

    1 2 3
    N 4 5
    6 N 7

    et en faisant ta technique, il me mets tout en ligne :/

Discussions similaires

  1. Mozilla affiche NaN pour le calcul de date
    Par ricgin dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/12/2014, 23h07
  2. [WD17] Calculer l'écart type d'un tableau de valeurs
    Par davcaz dans le forum WinDev
    Réponses: 3
    Dernier message: 31/05/2013, 10h56
  3. calcul d'écart type sous condition
    Par MathildeRossi dans le forum Excel
    Réponses: 2
    Dernier message: 13/07/2012, 08h05
  4. Calcul d'écart-type : STL ou pas ?
    Par oodini dans le forum C++
    Réponses: 6
    Dernier message: 22/09/2011, 10h48
  5. Réponses: 3
    Dernier message: 02/06/2008, 09h38

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