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 :

Besoin de laisser des valeurs absentes dans une matrice


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut Besoin de laisser des valeurs absentes dans une matrice
    Bonjour,
    je voudrais comparait plusieurs matrice entre elles, mais pour ça, il faudrait que je laisse des valeurs vide à certains indices.

    Je m'explique:
    J'ai une premier matrice qui sert de référence, avec des valeurs remontées.
    Et à côté, j'ai 7 autres matrices avec d'autres valeurs remontées, mais pas tout le temps. Du coup, il y a des vides. Et je voudrais savoir si il est possible de garder ces indices vides, sans qu'ils ne soient considérer comme des "0" ou autres.
    Et bien sur, il faut que chaque matrice ait le même nombre de ligne que la matrice de référence.

    Mais je ne sais pas trop comment m'y prendre.

    Merci

  2. #2
    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
    Non une matrice numérique ne peut avoir des éléments vides.
    A priori le plus logique serait de mettre dans les "vides" la valeur NaN (Not a Number).
    Sinon il faudra passer par des cell array.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Ou alors, si les valeurs manquantes doivent être considérées comme des "0", ils faut que, par la suite, je puisse ne pas en tenir compte dans les calculs que je pourrais faire sur la matrice (ex: moyenne, min, max, variance, médiane, ...)

    Tout en sachant aussi, que mis à part ces "0" rajoutés, le reste des valeurs n'en contient pas.

    Mais il faut que je reste sur des matrices, et non des cell array.

    Si c'est des "NaN", il y a quand même moyen de faire des calculs sur la matrice ? (voir calculs si dessus)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Points : 52
    Points
    52
    Par défaut
    A priori, je vois pas comment tu pourrais faire car tout calcul qui comprendrait un Nan ou Inf sera Nan...

    Je te conseille de mettre un Inf à ces fameux indices vides, et de coder toi-même des fonctions de moyenne, variance etc. adaptées à ton problème (pas compliqué ), c'est-à-dire qui feraient un test sur chaque composante de la matrice (genre a(i,j)==Inf) pour voir s'il prend en compte ou pas cette composante de la matrice dans le calcul; c'est le plus simple, ça sera fait en quelques lignes et ce sera bien plus rapide que de chercher une autre solution qui n'existe peut-être (sans doute ?) pas...

    Le coup des 0 modifiera la valeur des moyenne et variances, car le nombre d'échantillon sera N², à moins de retrancher 1 à ce nombre chaque fois que tu tombes sur un 0, ce qui en revient à faire ce que j'ai écrit ci-dessus

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut [DEBUTANT]
    J'ai oublié de le précisé, mais je suis débutant dans Matlab et ...
    Je n'ai rien compris à ton message casier.

    Peux tu être un peu plus clair et détaillé stp?

    Merci

  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
    Non les NaN c'est bien, il existe dans le FEX une contribution permettant de faire les calculs statistiques de base en négligeant les NaN (c'était dans un post qui malheureusement a subi le chti problème technique) : NaN Suite

    Sinon on peut toujours se débrouiller.
    Exemple du post supprimé donné par mr_samurai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % Données
    A = [1 NaN 3; NaN 2 6; 3 2 9]
     
    % Nombre de valeurs numeriques
    s = sum(~isnan(A))
    A(isnan(A)) = 0;
     
    % Moyennes des colones
    Moyenne = sum(A)./s

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Points : 52
    Points
    52
    Par défaut
    ben c'est plutôt débutant en programmation que tu es, parceque ce que j'ai écrit n'est pas vraiment propre à Matlab

    Je te dis juste de coder toi même la fonction. Par exemple, prenons la fonction moyenne. Tu vas faire toi même une fonction "ma_fonction_moyenne", qui va avoir pour argument d'entrée ta matrice A, et te renvoie en sortie la moyenne des éléments de la matrice non vides (c'est ce que tu veux faire je suppose ?). Pour ça, il faudra:

    1) repérer les éléments de la matrice que tu considère vides par quelque chose : ici, on choisi un Inf (infinie de matlab), donc tu mettras tous tes éléments "vides" à Inf
    2) coder ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function moyenne_matrice = ma_fonction_moyenne(A)
    moyenne_matrice=0; 
    nbr=0; % nombre d'éléments non "vides" de ta matrice
    N=size(A,1); % je récupère la taille de ta matrice
     
    for i=1:N 
     for j=1:N  % je boucle sur les éléments de la matrice
        if(a(i,j)~=Inf) % je teste si c'est un élément non "vide"
          moyenne_matrice=moyenne_matrice+a(i,j); % si oui j'ajoute la contribution de ce terme à la moyenne
          nbr=nbr+1; % j'incrémente le nombre d'échantillons de ma moyenne
       end
     end
    end
    moyenne_matrice=moyenne_matrice/nbr ;
    Après, il suffit de faire pareil pour les fonctions de variance etc., il suffit juste de coder betement la formule avec un test comme je l'ai fait pour la moyenne

    PS : ah bon ben finalement il y a un moyen de récupérer le nombre d'échantillons non NaN, je savais pas qu'il existant une fonction isnan, avec ça forcément tout devient simple !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Ok Merci casier.
    Mais je pense que je vais retenir la formule de caro qui m'a l'air plus pratique.

    Merci à vous 2

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Points : 52
    Points
    52
    Par défaut
    Elle l'est sans contexte, c'est évidemment celle là qu'il faut choisir !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/02/2011, 11h14
  2. Réponses: 5
    Dernier message: 22/05/2008, 16h24
  3. Des valeurs texte dans une formule
    Par Christophe D. dans le forum Excel
    Réponses: 5
    Dernier message: 15/12/2007, 16h25
  4. Besoin de retrouner des 0 aussi dans une requête SQL avec JOIN
    Par Jean-Marc68 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 05/11/2007, 14h45
  5. Affichage des valeurs disponibles dans une zone de liste déroulante
    Par azerty dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2007, 12h29

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