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] recherche dans les champs d'une structure


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut [find] recherche dans les champs d'une structure
    Bonjour,

    j'ai une structure (m2) avec différents champs (moins de 10, dont l'un Name) et un certain nombre d'entité, indice (de l'ordre de 50 000)

    Je souhaite récupérer l'indice des entités pour lesquels l'un des champs est égale à une valeur qui est une chaine de caractere.
    ((Une fois que j'aurais la liste des indices, je souhaiterai faire la moyenne des valeur d'un autre champs à ces indices. ))


    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [listeNameX] ={m2.Name};
    puis mais j'obtiens des erreurs.

    Auriez vous une piste à me proposer ?
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si j'ai bien compris, voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> m2 = struct('Name', {'Dupont', 'Durant', 'Dupond', 'Durant'});
    >> find( strcmp({m2.Name}, 'Durant') ) 
     
    ans =
     
         2     4

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Merci, ca répond à la question.
    Et si je cherche les durand, durant et durand2 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m3 = struct('Name', {'Dupont', 'Durant', 'Dupond', 'Durant', 'Durant2', 'Durand'});
    aa=find( strncmp({m3.Name}, 'Duran',5) )
    Super Merci !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    je récupere deux valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Area]={m2(lepuits).Area};
    [Sid0]={m2(lepuits).SI_d0};
    et souhaite faire le rapport par objet, puis la moyenne de ce rapport.
    J'ai ce code, mais il doit y avoir plus propre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for listing=1:numel(lepuitsSid0)
    [SIdivArea(listing)]=(cell2mat(lSid0(listing))/cell2mat(Area(listing)));
    end
     
    moylepuitsSIdivArea=mean(SIdivArea)
    merci pour votre aide.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu n'as pas besoin des crochets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Area]={m2(lepuits).Area};
    [Sid0]={m2(lepuits).SI_d0};
    Si je comprends bien, tu peux directement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SIdivArea = cell2mat(lSid0)./cell2mat(Area);
    moylepuitsSIdivArea=mean(SIdivArea);
    Sinon, tu n'es pas obligé d'utiliser cell2mat pour une seule valeur :
    Comment accéder aux valeurs des tableaux de cellules ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Oui super,
    C'est quand même étonnant, ma structure a 417396.
    J'admets c'est beaucoup, mais ça prends 30 min à faire le rapport.

    Étonnant, non ?
    je précise que j'ai une station de travail trés convenable.
    Merci pour vos éclaircissements

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu as bien utilisé l'opérateur ./ et non / ?
    Dans le cas contraire, je peux comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SIdivArea = cell2mat(lSid0)./cell2mat(Area);

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Oui, ce point me fait perdre ... 30 minutes ou presque dans le calcul
    Ca calcul point à point la au lieu de faire le produit des matrices.
    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/08/2012, 16h59
  2. rechercher la valeur d'un champs dans les champs d'une autre table
    Par aloe-vera dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 02/08/2012, 14h53
  3. [SQL Server] rechercher dans plusieurs champs d'une table
    Par houla! dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/08/2006, 09h37
  4. Réponses: 4
    Dernier message: 08/07/2006, 06h36
  5. ADO et les guillemet dans les champs d'une base Texte
    Par jnc dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/10/2005, 08h41

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