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 :

Eliminer les lignes


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut Eliminer les lignes
    Bonsoir ;

    Je suis novice sur le logiciel Matlab, donc mes questions vont vous paraitre assez banales.
    J’ai une matrice A de taille 26000x26000. Dans cette matrice il y a des valeurs manquantes et je veux éliminer les lignes qui contiennent ces valeurs.

    J’ai trouvé sur le site le programme suivant qui élimine les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    out = [];
    for i=1:size(in,1)
    isAllNaN = true;
    for j=2:size(in,2)
    if ~isnan(in{i,j})
    isAllNaN = false;
    end
    end
    if ~isAllNaN
    out = [out ; in(i,:)];
    end
    end
    in correspond à quoi ?
    Out =[] me donne une matrice vide!
    Dans ce programma ma matrice A correspond à quoi?

    Dans une version condensée de ce programme on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    notnan = sum(cellfun(@(x) ~isnan(x),in(:,2:end)),2);
    out = in(notnan~=0,:);
    x ici correspond à quoi?

    Merci d’avance pour votre aide.

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut !

    A tout hasard, il faudrait 5,408 gigaoctets de mémoires pour stocker ta matrice A. Est-tu sur d'en avoir autant ?

    Jean-Marc Blanc

  3. #3
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Pour ta première question, il me semble que ton A correspondrait à la variable in.

    Pour la seconde, le x est "un peu" une variable muette. C'est à dire que dans le cellfun elle te permet d'exprimer comment appliquer ta fonction et elle se réfère à la variable que tu mets en entrée de ta fonction (in dans ce cas)
    En gors, tu dis à la fonction cellfun d'appliquer à ta matrice in, le handle de fonction (@(x) ~isnan(x)) qui correspond donc à la fonction ~isnan(in) appliqué à toutes les cellules.

    Je suis pas sur d'avoir été très clair mais c'est quelquechose qui vient à l'utilisation, je te conseille de faire des tests pour mieux comprendre le principe.

    Bon courage,

    Duf

  4. #4
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut
    Salut;

    J’ai pris une matrice test (32x4). J’ai appliqué par la suite la 1er boucle en remplaçant in par A. Lors de l’exécution j’ai reçu le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ??? Cell contents reference from a non-cell array object.
    De même pour la seconde boucle je reçois le message suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ??? notnan = sum(cellfun(@(x) ~isnan(x),A(:,2:end)),2);
                              |
    Error: "identifier" expected, "(" found

    MAMIKA

  5. #5
    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
    Quelle est ta version de MATLAB ?

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Le problème ne viendrait-il pas que tu appliques une fonction pour tableau de cellule à une matrice?

    As-tu essayé avec 'arrayfun' ?

Discussions similaires

  1. Eliminer les lignes vides d'une liste
    Par jncoffy dans le forum Excel
    Réponses: 5
    Dernier message: 29/11/2011, 21h57
  2. [langage] Trouvé les lignes commencant par [
    Par Nervix dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2004, 10h04
  3. [C#] Compter les lignes d'un DataSet
    Par alexischmit dans le forum ASP.NET
    Réponses: 13
    Dernier message: 26/04/2004, 15h17
  4. Réponses: 3
    Dernier message: 26/04/2004, 12h51
  5. determiner les ligne visible ds un RichEdit
    Par hhfr dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2002, 18h15

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