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 pour création de functions simples mais utiles


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 13
    Points
    13
    Par défaut aide pour création de functions simples mais utiles
    Bonjour

    j'ai la matrice xPrice (fichier matlab) et je cherche à ecrire une fonction qui me retourne dans une matrice de dimension (1 ligne* nombre de colonnes) , le nombre de NaN ( données manquantes) à la fin de chaque colonne. Si par exemple j'ai 3 valeurs manquantes successives à la fin de la colonne 2, je devrais avoir dans ma matrice retournée 3 au niveau de cette colonne. Si il n ya pas de NaN à la fin de la colonne, la valeur 0 est retournée.

    merci de votre aide.

  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 316
    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 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Voici la solution vectorisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    M=[  nan  2  nan 
         4  5  nan
         7  nan  9
        10 11 12
        13 nan 15
        nan nan nan
        19 nan nan]
     
    idx=isnan(M);
     
    NaNs_au_debut=sum(cumprod(idx))
     
    NaNs_a_la_fin=sum(cumprod(idx(end:-1:1,:)))
    A étudier en détail... comme d'habitude

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    Bonjour

    message d'erreur suivant:
    ??? Undefined function or method 'cumprod' for input arguments of type 'logical'.
    à quoi cela est il du?

    Merci

  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 316
    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 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Ajoute

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    Ca marche, par contre j'aimerais bien savoir en quoi l'utilisation du double a permis de régler le probleme.

    Aurais tu une solution concernant la fonction qui renvoie la date de début pour les premieres valaurs non NaN dans chaque colonne et les dates de fin dans chaque colonne pour les dernieres valeurs non NaN?

    Merci de ton aide.

  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 316
    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 316
    Points : 52 951
    Points
    52 951
    Par défaut
    La majeur partie des fonctions Matlab ne fonctionne bien qu'avec les variables de type Double, c'est tout.

    Pour étudier les non-NaN, tu fais simplement cette modification :

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    Pour les non-NaN, je ne cherche pas les sommes, mais plus tot, les dates correspondantes, donc j'utilise aussi la matrice xDates.

    Ce que je cherche c'est comment récupérer la date correspondante à cet index, alors que MATLAB stocke les dates dans une matrice (xDates) et mes prix dans une autre(xPrice).

    Merci

  8. #8
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 102
    Points
    102
    Par défaut
    si tes deux matrices sont organisees de la meme maniere, c'est a dire que tu peux passer d'un element Nan a la date correspondante en connaissant l'indice de ligne et de colonne, tu peux utiliser find pour trouver les coordonnees/indices de tes elements Nan dans l'une, puis aller lire la date correspondante dans l'autre matrice en utilisant ces coordonnees.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Points : 102
    Points
    102
    Par défaut
    Si tu as d'un cote une matrice A avec dedans tes dates. Si tu as de l'autre cote une matrice B avec dedans les valeurs, dont les NaN.
    Si tu sais que B(i,j) = NaN, tu n'as plus qu'a recuperer A(i,j) pour avoir la date correspondante.

    pour avoir les indices i,j de l'element Nan :
    regarde Find dans Help de matlab.
    [r,c] = find (X) renvoie dans r et c les indices des elements non nuls de X. Mais tu peux chercher d'autres elements par exemple find (X ==0) pour trouver les elements nuls. Je ne sais pas si find (X == NaN) marche, il faut tester.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    je cherche à afficher les dates de debut pour chaque colonne de la matrice xPrice lorsque je suis à la premiere cellule qui n'est pas NaN.

    je cherche egalement à afficher la date fin de ces meme colonnes lorsque je tombe sur la derniere valeur de chaque colonne qui n'est pas NaN.

    Je n'y arrive toujours pas car, je n'arrive pas à travailler sur les deux matrices malgré les explications.

    Je joins les deux fichiers avec mes deux matrices: xPrice qui contient mes données avec des NaN et xDates et textdata qui contiennent les dates.

    Merci de votre aide.

  11. #11
    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 828
    Points
    14 828
    Par défaut
    ça devrait marcher...si j'ai bien compris ton problème...
    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
     
    %initialisations
    dates_debut=zeros(1,size(xPrice,2));
    dates_fin=dates_debut;
    %boucle sur les colonnes de xPrice
    for iCol=1:size(xPrice,2)
        %la colonne étudiée
        xCol =xPrice(:,iCol);
        %Les emplacements des non-nan
        idx = find(~isnan(xCol));
        %le premier indice donne la première date
        if length(idx)>0 %on verifie quand meme qu'il y en a au moins un
            dates_debut(iCol)=xDates(idx(1));
            dates_fin(iCol)=xDates(idx(end));
        end    
    end
    Mais l'information qui manquait depuis le début de ton post c'est que xDates est un vecteur pas une matrice !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 13
    Points
    13
    Par défaut
    Cela marche. Par contre j'ai remplacé xDates par textdata pour avoir directement les vraies dates: par exemple "21/12/2004"

    Merci encore

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

Discussions similaires

  1. aide pour alléger mon code simple mais long
    Par tuco_benedicto dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/03/2010, 20h52
  2. Recherche aide pour création de site
    Par herve.delisle dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/06/2007, 14h03
  3. besoin d'aide pour comprendre un exo simple de java
    Par chadel dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 23h27
  4. Aide pour création requête
    Par in dans le forum Oracle
    Réponses: 7
    Dernier message: 19/06/2006, 13h55
  5. developpeur c++ demande aide pour création d'un pieton 3D
    Par fumidu dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 29/05/2006, 17h51

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