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

  1. #1
    Futur Membre du Club Avatar de Montessusdeballore
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Chili

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : mai 2016
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Selection de fichiers dans un lot de fichiers avec multiples doublons
    Bonjour a tous,
    J’essaie grosso-modo dans une liste de N fichiers représentant les résultats de M expériences (M < N) de ne récupérer qu’un résultat par expérience, en l’occurrence le meilleur. Pour être plus clair, dans l’exemple ci-dessous il y a N=10 fichiers de résultats (01_ *-> 10_*) correspondants a M=5 expériences (A,B,C,D et E). Le chiffre suivant le « nom de expérience » (_24, _10, _13, …, _54, _85) correspondrait à sa fiabilité, desquelles je ne veux garder que la plus haute pour chaque experience.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    liste(1,:)   = '01_A_24' ; %
    liste(2,:)   = '02_A_10' ; %
    liste(3,:)   = '03_B_13' ; %
    liste(4,:)   = '04_C_08' ; %
    liste(5,:)   = '05_D_10' ; %
    liste(6,:)   = '06_D_12' ; %
    liste(7,:)   = '07_D_21' ; %
    liste(8,:)   = '08_D_05' ; %
    liste(9,:)   = '09_E_54' ; %
    liste(10,:) = '10_E_85' ; %
    Sur cet exemple très simple, le résultat attendu serait donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    liste_Exp(1,:) = '01_A_24' ; %
    liste_Exp(2,:) = '03_B_13' ; %
    liste_Exp(3,:) = '04_C_08' ; %
    liste_Exp(4,:) = '07_D_21' ; %
    liste_Exp(5,:) = '10_E_85' ; %
    J’ai en réalité beaucoup plus de fichiers à traiter (~25000), et les conditions de sélections sont beaucoup plus complexe, mais il s’avère que je n’arrive pas à résoudre l’aspect algorithmique de l’exemple simple ci-dessus proprement, donc pas prête d’avancer sur le reste…
    Je pars sur une base de ‘for’ avec des ‘if fiab(i)>fiab(i+1)’ alors ‘while …’ , ‘break’, ‘continue’, et des counteurs remis à zéros ou a 1 si le fichiers suivant correspond…etc… mais rien n’y fait je me pers dans les indices et dans les ‘counts’ de nombre de fichiers identiques pour les comparer deux-par-deux… Et ce juste sur ce cas sommes-toute très simple… J’imagine qu’il n’y a pas de solution en deux lignes, mais un coup de main serait le bienvenu !
    Merci beaucoup de votre aide !

  2. #2
    Futur Membre du Club Avatar de Montessusdeballore
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Chili

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : mai 2016
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Solution brutale...
    Pour ceux que ça intéresse, j'ai trouvé une manière plutôt moche et lourde de le faire, mais ça marche... En fait je compare les fichiers 2-par-2 puis "supprime" de la liste celui qui ne convient pas. Une fois fait, je 'break' la boucle de base, puis re-processe de la même manière la liste de fichier...Comme si je lançais plusieurs fois le même code d'affilé, jusqu’à ce que tout les fichiers soient lus.
    Bref, plutôt brutal sur une grande quantité de données mais cela a fonctionné. Pour l'exemple ci-dessus, voilà la forme de la solution:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    liste(1,:)  = '01_A_24' ; %
    liste(2,:)  = '02_A_10' ; %
    liste(3,:)  = '03_B_13' ; %
    liste(4,:)  = '04_C_08' ; %
    liste(5,:)  = '05_D_10' ; %
    liste(6,:)  = '06_D_12' ; %
    liste(7,:)  = '07_D_21' ; %
    liste(8,:)  = '08_D_05' ; %
    liste(9,:)  = '09_E_54' ; %
    liste(10,:) = '10_E_85' ; %
    %%
    liste_Exp = liste ; % 
    for U = 1:size(liste_Exp,1)
        L = size(liste_Exp,1) ; 
        nm = liste_Exp(:,4) ; 
        cf = str2num(liste_Exp(:,6:7)) ; 
        for i=1:L-1
            if strcmp(nm(i),nm(i+1)) ; %
                if cf(i+1) > cf(i)
                    liste_Exp = [ liste_Exp(1:i-1,:) ; liste_Exp(i+1:end,:) ] ;
                elseif cf(i+1) < cf(i)
                    liste_Exp = [ liste_Exp(1:i,:) ; liste_Exp(i+2:end,:) ] ;
                end
                break
            end
        end
    end
     
    liste_Exp

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    mai 2008
    Messages
    1 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 922
    Points : 2 653
    Points
    2 653
    Par défaut
    Bonjour,

    Une idée :

    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
    19
    clear
    liste(1,:)  = '01_A_24' ; %
    liste(2,:)  = '02_A_10' ; %
    liste(3,:)  = '03_B_13' ; %
    liste(4,:)  = '04_C_08' ; %
    liste(5,:)  = '05_D_10' ; %
    liste(6,:)  = '06_D_12' ; %
    liste(7,:)  = '07_D_21' ; %
    liste(8,:)  = '08_D_05' ; %
    liste(9,:)  = '09_E_54' ; %
    liste(10,:) = '10_E_85' ; %
     
    C=['A','B','C','D','E']
    for n=1:5
        U=liste(:,4)==C(n);
        liste_ext(n)=max(str2num(liste(U,6:7)));
    end
    R=ismember(str2num(liste(:,6:7)),liste_ext');
    liste_ext=liste(R,:)

  4. #4
    Futur Membre du Club Avatar de Montessusdeballore
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Chili

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : mai 2016
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Salut @phryte,

    Merci de ta réponse. Pour le cas réel que je dois traiter je dois garder les conditions 'if' imbriquées (je vais chercher des valeurs dans les fichiers qui ne sont pas toujours existantes, donc en cas de non-existence je vais en chercher d'autres, puis d'autres, etc...). De plus si 2 "chiffres sont identiques" dans la liste le 'R' ne correspondra pas a ce qui est recherché me semble-t-il. En tout les cas l'idée de base est intéressante et je vais y réfléchir pour optimiser mon code!
    J'ai appris 2 choses intéressantes dans ton code:
    d'abords ce type de syntaxe que je ne connaissais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     U = liste(:,4) == C(n);
    que j'aurais écris de manière lourde comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    U=zeros(L,1); U(strfind(liste(:,4)',C(n)))=1;
    , ensuite l'idée d'utiliser 'ismember', plus pertinent que des 'strfind' ou 'find' avec indices pour sélectionner mes résultats.
    Merci phryte, a+

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

Discussions similaires

  1. Erreur de compilation fichier avec multiples headers
    Par Nashtare dans le forum Langage
    Réponses: 16
    Dernier message: 03/01/2019, 07h33
  2. Parcours fichier avec clés doublons
    Par axxisII dans le forum WinDev
    Réponses: 2
    Dernier message: 13/01/2013, 21h19
  3. Utilisation d'un fichier de données dan un lot DTS
    Par ninsekh dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/08/2007, 17h40
  4. Selection extention fichier dans opendialog
    Par Chonchon dans le forum Delphi
    Réponses: 3
    Dernier message: 06/04/2007, 14h59
  5. [Upload] upload fichiers avec multiple submit
    Par dolf13 dans le forum Langage
    Réponses: 17
    Dernier message: 06/06/2006, 02h20

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