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

Langage Perl Discussion :

manipulation de arrays


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut manipulation de arrays
    Bonjour,


    J'ai trois tableaux indexés :

    @nucleotides_array : T C T C A C T C T C G A C T G A C T G A C G A C T G
    @values_array : 12.33 13.53 13.49 0.51 14.22 25.58 12.89 13.04 11.81 0.72 11.23 0.94 13.44 1.26 45.99 0.55 13.29 1.31 1.48 25.08 2.19 13.20 0.50 11.85 11.45 11.14
    @unic_array : 11.14 11.23 11.45 11.81 11.85 12.33 12.89 13.04 13.2 13.29 13.44 13.49 13.53 14.22
    @nucleotides_array et @values_array contiennent 26 éléments associés 2 à 2 via leur indice. Donc $nucleotides_array[3] se rapporte à $values_array[3]. Je n'ai pas utilisé de hash car ces valeurs pourraient ne pas être uniques.

    @unic_array contient des éléments des éléments @values_array triés par ordre croissant. Je voudrais récupérer les nucléotides correspondants. Je pense utiliser des boucles ainsi que la fonction any du module List::MoreUtils. Est-ce une bonne idée, avez-vous une meilleure proposition d'algorithme?
    Le problème se posera si 2 mêmes valeurs existent et que les nucléotides qui leur sont associés sont différents. Je vais donc commencer par vérifier que les valeurs sont uniques et dans le cas contraire, j'afficherai un message.

    Merci,

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut exemple
    J'ai vérifié et j'ai bien des valeurs communes dans @unic_array mais ce n'est pas un problème étant donné que le but est de compter le nombre de chaque nucléotide de @unic_array.


    Exemple :
    @nucleotides_array : T C T C A C T C T C G A C T G A C T G A C G A C T G
    @values_array : 1.83 1.98 1.60 0.51 1.93 3.65 1.74 0.36 0.30 0.38 1.81 0.45 0.54 1.70 1.77 0.28 1.83 1.51 1.73 1.83 0.37 1.57 0.31 1.74 0.52 0.39
    @unic_array : 1.51 1.57 1.6 1.7 1.73 1.74 1.74 1.77 1.81 1.83 1.83 1.83 1.93 1.98

    Merci, tout conseil est le bien venu.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    J'ai vérifié et j'ai bien des valeurs communes dans @unic_array mais ce n'est pas un problème étant donné que le but est de compter le nombre de chaque nucléotide de @unic_array.
    Je ne comprend pas en quoi ce n'est pas un problème ?
    Si tu as deux valeurs de nucléotides différentes (par exemple pour 1.74), lequel vas-tu compter ?

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Je ne comprend pas en quoi ce n'est pas un problème ?
    Si tu as deux valeurs de nucléotides différentes (par exemple pour 1.74), lequel vas-tu compter ?
    Si pour mes valeurs 1.74 j'ai G ou C je compte donc 1 G et 1C.

    Donc pour mes 14 valeurs de @unic_array, j'aurai par exemple 5 G, 2 C, 4 A et 3 T (une somme de 14 nucléotides). Je dois trier les valeurs par nucléotides, j'ajouterai donc une fois 1.74 à l'array contenant les valeurs des G et une fois à celui des T. Le but ultime étant de calculer la valeur moyenne de A, de T, de C et de G.

    @val_A
    push @val_G, 1.74
    @val_T
    push @val_C, 1.74
    Ce dont je suis certaine c'est que les valeurs de @values_array qui ne se retrouvent pas dans @unic_array ne sont pas communes. Donc si j'ai une valeur doublon dans @unic_array, elle sera en double dans @values_array et jamais en triple. Est-ce clair?

    Je vais essayer en passant par un hash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    				# tableau %values_hash
    				# clé : valeur		valeur : le ou les nucléotides associés
    				my %values_hash;
    				for my $i (0..$#nucleotides_array){
    					push @{$values_hash{$values_array[$i]}}, $nucleotides_array[$i];
    				}
    Récupérer les valeurs de @unic_array et regarder le ou les nucléotides associés ... j'ai l'impression qu'il devrait y avoir plus élégant et plus simple comme méthode. Un grand merci pour ton aide.

  5. #5
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Que penses-tu de cette façon de procéder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    				# tableau des valeurs de @unic_array sans doublons
    				my @treated_values = doublons_tranche(\@unic_array);
     
    				# récupération des indices correspondats dans @values_array
    				my @indices; 
     
    				for my $i (0..$#treated_values){
    					push @indices,indexes { $_ == $treated_values[$i] } @values_array;
    				}
    @treated_values : 1.51 1.57 1.93 1.77 1.83 1.73 1.6 1.81 1.74 1.98 1.7
    @indices : 17 21 4 14 0 16 19 18 2 10 6 23 1 13
    Maintenant que j'ai les indices, il suffit de regarder les nucléotides associés.

    Quelle est la différence entre indice et indexe? Lequel vaut-il mieux utiliser? Merci.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je crois avoir compris. J'essaye de retranscrire : à chaque valeur de @unic_array, tu prends le nucléotide de la première valeur correspondante dans @nucleotides_array, puis si tu rencontre à nouveau la même valeur, tu prends le nucléotide de la deuxième valeur correspondante dans @nucleotides_array, ainsi de suite s'il y en a d'autre. Donc pour le premier 1.74, tu sélectionnes le T, et pour le deuxième, tu sélectionnes le C. C'est bien ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @nucleotides_array = qw(T C T C A C T C T C G A C T G A C T G A C G A C T G);
    @values_array = qw(1.83 1.98 1.60 0.51 1.93 3.65 1.74 0.36 0.30 0.38 1.81 0.45 0.54 1.70 1.77 0.28 1.83 1.51 1.73 1.83 0.37 1.57 0.31 1.74 0.52 0.39);
    @unic_array = qw(1.51 1.57 1.6 1.7 1.73 1.74 1.74 1.77 1.81 1.83 1.83 1.83 1.93 1.98);

  7. #7
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Donc pour le premier 1.74, tu sélectionnes le T, et pour le deuxième, tu sélectionnes le C. C'est bien ça ?
    Oui, c'est bien ça, j'ai trouvé une façon de procéder, je dois encore vérifier les valeurs :
    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
    				# tableau des valeurs de @unic_array sans doublons
    				my @treated_values = doublons_tranche(\@unic_array);
     
    				for my $i (0..$#treated_values){
     
    					# récupération des indices correspondants dans @values_array
    					my @indices = indexes { $_ == $treated_values[$i] } @values_array;
     
    					# recherche des nucléotides associés
    					foreach my $j (@indices){
     
    						if ($nucleotides_array[$j] eq 'A'){
    							push @val_A, $values_array[$j];
    						}
    						elsif ($nucleotides_array[$j] eq 'T'){
    							push @val_T, $values_array[$j];
    						}						
    						elsif ($nucleotides_array[$j] eq 'C'){
    							push @val_C, $values_array[$j];
    						}
    						elsif ($nucleotides_array[$j] eq 'G'){
    							push @val_G, $values_array[$j];
    						}						
    					}
    				}

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

Discussions similaires

  1. [PL/PGSQL][9.2] manipuler un ARRAY
    Par CosmoKnacki dans le forum Requêtes
    Réponses: 0
    Dernier message: 04/12/2012, 12h59
  2. Comment bien manipuler les array multidimensionnel
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2012, 21h10
  3. [PHP 5.3] Besoin d'aide pour la manipulation des array
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2011, 23h26
  4. Boucle Foreach et manipulation d'array
    Par rom1dvp dans le forum Langage
    Réponses: 5
    Dernier message: 12/03/2011, 03h45
  5. manipulation d'arrays recherche de valeurs
    Par Jasmine80 dans le forum Langage
    Réponses: 4
    Dernier message: 08/02/2007, 08h51

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