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 :

longueur de cell [Débutant]


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut longueur de cell
    Bonjour tous,
    j'ai une question surement très facile mais je n'ai pas trouvé la solution..

    voici comment je remplis un tableau de type CELL à partir d'un fichier texte qui contient des nombres separés par des virgules:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ligne=fgets(monFichierTexte);
    detec=textscan(ligne,'%s','delimiter',',');
    table{i,j}=detec{1}(:)';
    en sortie de ceci table est de ce type <19000,3> car j'ai trois types d'echantillons et car le plus grand echantillons contient 19000 données.
    Les autres en contiennent moins et les cases vides sont donc remplacées par [] par matlab

    ce que je voudrais faire:
    => pour chaque type d'echantillons je voudrais connaitre le nombre d'echantillons

    probleme:
    si je fais ceci:
    j'aurais la taille que du plus gros echantillon

    question:
    - comment faire pour avoir la taille de chacunes de mes colonnes ?
    - je vais etre obligé par divers type de variables du type: table1 , table2 ... au lieu d'avoir qu'un seul tableau qui contient tous ?


    merci d'avance pour 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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C = {1 1 1 ; [] 1 1 ; 1 1 1 ; [] [] [] ; [] [] 1}
     
    sum(cellfun('length',C))

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par Dut Voir le message
    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C = {1 1 1 ; [] 1 1 ; 1 1 1 ; [] [] [] ; [] [] 1}
     
    sum(cellfun('length',C))
    ouahou! c''est super ça

    merci DUT

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    DUT, je n'ai pas trop compris comment fonctionne la ligne que tu m'as donné

    1°) Je l'ai appliqué à mon premier cas qui etait une cell "table" de <19000x2> et ça fonctionne très bien

    lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AAA=sum(cellfun('length',table));
    le vecteur AAA est celui ci : [19000, 17500] ce qui est exactement ce que je voulais car ça a comptabilisé que les cellules non vide pour la 2eme colonne.

    2°) par contre j'ai essayé de l'appliquer à un autre cas : une cell de <1x2>


    et je m'attendais lorsque je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AAA=sum(cellfun('length',table));
    à avoir AAA=[1, 1] car les deux lignes sont pleine mais il m'a donné :

    AAA=1.778 ???

    du coup ça m'a fait planté le reste du programme car dans le reste du programme AAA est un vecteur...

    conclusion

    - pourrais tu m'expliquer le fonctionnement de la fonction que tu m'as donné car je l'ai pas reellement comprise

    - comment ce fait il que dans le deuxieme cas ça ne marche pas ... c'est bizarre ?

    merci d'avance pour ton aide

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je t'invite à regarder la documentation de la fonction CELLFUN en tapant doc cellfun car ici il n'y a aucune difficulté: c'est une application directe de la fonction
    Une fois cela fait, fait de même avec la fonction SUM

    Lorsque tu ne trouves confronté à une erreur, pense à décomposer tes lignes
    cellfun('length',table) puis sum(cellfun('length',table))

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci Jerome pour les conseils

    je viens de regarder la documentation et j'ai bien compris à présent (enfin je pense).

    Exemple:
    Si j'ai une CELL de ce type : AAA=<19000x2> et avec dans la première colonne ceci <1x9> et dans la deuxieme <1x7>

    alors si je fais sum(cellfun....) je vais sommer la taille de tous les vecteurs contenus dans les deux colonnes de AAA

    le résultats que j'ai obtenu est un truc dans ce genre:
    Probleme:

    maintenant j'ai AAA=<19000x2> et comme tout à l'heure <1x9> et <1x7> dans les colonnes.

    En appliquant exactement la meme formule que tout à l'heure je m'attendais à avoir comme résultat:

    or voici le résultat que j'ai :
    Conclusion

    => dans le premier cas la fonction me renvoi un vecteur, dans le deuxieme cas un scalaire alors que j'ai utilisé la meme formule ???

    pourriez vous m'expliquez et me dire comment résoudre ceci s'il vous plait ?

    merci d'avance

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    pourriez vous m'expliquez et me dire comment résoudre ceci s'il vous plait ?
    Si tu me demandes cela c'est que tu n'as pas assez regardé la documentation de la fonction SUM. Alors je te remets les passages intéressants pour ton cas:
    Citation Envoyé par doc sum
    If A is a vector, sum(A) returns the sum of the elements.

    B = sum(A,dim) sums along the dimension of A specified by scalar dim. The dim input is an integer value from 1 to N, where N is the number of dimensions in A. Set dim to 1 to compute the sum of each column, 2 to sum rows, etc.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    super, merci jerome

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

Discussions similaires

  1. [combinatoire] combinaisons de toutes longueur
    Par Toorop dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/02/2007, 17h08
  2. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 21h14
  3. Réponses: 2
    Dernier message: 23/02/2003, 01h49
  4. Sans effet: StringGrid1->Cells[1][1][2] = c ?
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/11/2002, 11h32
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 19h31

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