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 :

fonction FIND et MAX/MIN


Sujet :

MATLAB

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut fonction FIND et MAX/MIN
    Salut à tous les Matlabeurs

    Je travaille sur des grandes quantités de données, et je cherche à récupérer, parmis un vecteur de n lignes, les numéros de lignes correspondant aux m premières valeurs maximales. J'utilise actuellement la méthode du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find(ligne =  min(vecteur))
    dans une boucle à m répétitions, en supprimant à chaque fois la ligne obtenue (me laissant ainsi par élimination les m-1 valeurs max).
    Seulement sur un vecteur de taille m = 1 000 000 cela me prend énormément de temps, car je dois à chaque fois balayer les m valeurs afin de trouver le min et le supprimer...

    Auriez une piste pour une solution moins coûteuse en temps ?

    Merci à vous.

  2. #2
    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 : 40
    Localisation : France

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

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

    Peut-être une idée (avec data ton vecteur de données):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find(data<inf,m,'last')
    A priori ca doit donner les m plus grandes valeurs du vecteur data (à tester plus avant, je n'ai fais qu'un test rudimentaire )

    Duf

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    Merci duf42, ça à l'air de marcher oui, bien plus efficace

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    Erf, en fait non... ta technique me donne les x valeurs inférieures à...
    Or dans mon problème, je recherche les x valeurs les plus grandes.

    Une autre idée ?

    Merci

  5. #5
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Ah oui autant pour moi, les tests n'étaient pas suffisants

    Une autre solution plus simple serait peut-être de trier ton vecteur avec SORT.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    J'ai pensé à sort en effet, sauf que cela devient vite une usine à gaz dans mon cas, puisque je recherche les m valeurs les plus grandes à partir d'un vecteur P qui fait environ 20 000 lignes, et qu'à partir de ces m valeurs je retiens derrière X structures de m*n valeurs de simulations, (ou n est proche de 50, ce qui me fait des matrices de 20 000*50 à trier, et X = 1000...), et ensuite je vais refaire une seconde sélection de l valeurs sur un autre vecteur Q, etc... etc.

    D'autres idées ?

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Le tri me semble pourtant à moi aussi la solution la plus efficace... ou alors je n'ai pas bien compris le contexte du problème

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    Je vais re-tester le SORT alors... Mais est-il possible de récupérer l'algo de tri qui a été effectué ? Exemple, je tri le vecteur [1,5,3,9] par ordre croissant, donc [1,3,5,9]. Est-il possible de récupérer l'algo afin que le vecteur [1,2,3,4] devienne [1,3,2,4] ?

    Merci pour vos réponses.

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [idx,idx] = sort([1,5,3,9])
    C'est ça ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    Oui, mais est-ce possible par la suite de faire une sorte de

    qui me donnerai [a,c,b,d] ?

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    >> A = [1,5,3,9];
     
    >> [B,idx] = sort([1,5,3,9])
     
    B =
     
         1     3     5     9
     
     
    idx =
     
         1     3     2     4
     
    >> B(idx)
     
    ans =
     
         1     5     3     9
    ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Points : 129
    Points
    129
    Par défaut
    C'est top

    Merci Dut

  13. #13
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Si Dut a résolu ton problème, merci de cocher la case "résolu".
    Moi, j'dis rien, mais quand Dut a résolu un problème, c'est en général difficile d'ajouter quelque chose d'intelligent.

    DUT = thread killer (pour notre plaisir à tous )

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

Discussions similaires

  1. recherche fonction algorithme d'optimisation min/max
    Par Wuthraad dans le forum Scilab
    Réponses: 0
    Dernier message: 10/03/2014, 09h13
  2. Fonction analytique et recherche max min
    Par jopont dans le forum SQL
    Réponses: 35
    Dernier message: 19/07/2013, 12h37
  3. Réponses: 3
    Dernier message: 11/01/2008, 19h24
  4. la fonction Max/Min sur des dates
    Par chabagrou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2007, 18h38
  5. [VBA-E] Fonction "FIND"
    Par cinc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2005, 11h16

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