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 :

Find et boucle


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut Find et boucle
    Bonjour et meilleurs voeux pour cette année 2013 !

    J'ai bricolé un bout de script qui me permet d'ouvrir simultanément plusieurs fichiers qui se présentent sous la forme d'un entête de quelques lignes suivi d'un tableau 9 colonnes et environ 10k lignes. Je conserve pour chaque fichier la deuxième colonne que je range dans une matrice que j'appelle p. J'obtiens alors une matrice 10k lignes et autant de colonnes que de fichiers ouverts.

    J'aimerais maintenant obtenir l'indice des valeurs de p comprises entre 1.98 et 2.02 pour chaque fichier, donc pour chaque colonne, sachant que je ne connais absolument pas le nombre d'éléments se trouvant dans cette fenêtre et qu'il est susceptible d'être différent d'un fichier à l'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1:numel(filename)
        ind_2bar(:,i) = find(2-2*0.01<p(:,i) & p(:,i)<2+2*0.01);
    end
    me renvoit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Subscripted assignment dimension mismatch.
    Simple problème de syntaxe j'imagine mais j'avoue bloqué complètement.

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour, et bonne année également

    Chaque fichier ayant j'imagine un nombre différent de valeurs qui correspondent à ce critère, tu ne pourras pas stocker ces indices dans un simple tableau ayant un nombre de colonnes fixe.
    Il te faut utiliser un tableau de cellules. Voir aussi ce lien.

  3. #3
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Il y a bien autant de ligne dans tous les fichiers?
    je ne connais absolument pas le nombre d'éléments se trouvant dans cette fenêtre et qu'il est susceptible d'être différent d'un fichier à l'autre
    Je te conseille d'utiliser une structure pour stocker l'information au lieu d'un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ind_2bar{i} = find(2-2*0.01<p(:,i) & p(:,i)<2+2*0.01);
    Seconde solution tu stockes non pas le résultat du find, mais celui du test logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ind_2bar(:,i) = 2-2*0.01<p(:,i) & p(:,i)<2+2*0.01;
    Car dans ce cas le résultat est toujours de même taille.

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    Je n'avais pas pensé en effet qu'un simple tableau ne pouvait pas supporter des colonnes au nombre d'éléments différent. J'ai opté pour la solution du tableau de cellules du coup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1:numel(filename)
        ind_2bar{i} = num2cell(find(2-2*0.01<p(:,i) & p(:,i)<2+2*0.01));
    end
    fonctionne impec !

    Merci à vous deux !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Cela peut dépendre de ce que tu souhaites faire par la suite, mais l'utilisation de num2cell est inutile ici.

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    En effet. Je l'avais ajouté suite au message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell contents reference from a non-cell array object.
    Certainement autre chose dans mon code que j'ai réglé sans même m'en rendre compte.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu devais avoir gardé en mémoire ta variable ind_2bar sous forme de simple tableau numérique.
    Cell contents assignment to a non-cell array object.

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    C'est fort possible oui. Je n'avais lancé qu'une partie du script à ce moment là. Merci encore !

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

Discussions similaires

  1. [XL-2007] Gestion d'erreur- boucle de tri cells.find - debutant
    Par isfet dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/06/2010, 09h54
  2. [ActiveX][Word] Boucle Find.Found infini
    Par LordHarryPotter dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/06/2010, 14h30
  3. problème de boucles et .find
    Par abouhossam dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2009, 14h27
  4. Boucle sur Selection.Find.Execute
    Par Dapangma dans le forum VBA Word
    Réponses: 4
    Dernier message: 12/08/2008, 08h57
  5. Problème de boucle avec un find
    Par mick77 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/06/2007, 16h46

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