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 :

réordonner une matrice (Parseur)


Sujet :

Langage Perl

  1. #41
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    je voudrais ajouter quelque chose à la matrice obtenu à la fin de ce parseur.

    je veux parcourir le tableau et chercher la plus grande valeur.

    Considérer cette valeur comme étant le pourcentage le plus élevé et donc 100%

    Puis calculer le pourcentage du reste des valeurs du tableau.

    Cordialement.

    P.S: Si vous jugez utile de faire un nouveau sujet ça sera le cas.

  2. #42
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Il est sans doute possible d'ajouter un calcul du max dans la boucle de lecture du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (defined(my $line = <$MAFFT>)) {
    ...
    }
    et de recalculer les ratios dans la fonction print_mafft en y ajoutant en paramètre, la valeur max calculée.

    Pour calculer le max d'une liste de valeur, tu auras tout avantage à utilise List::Util::max()

    Si tu as besoin de plus d'aide... je pourrais peut-être regarder le script lundi.

  3. #43
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Le script modifié :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use Data::Dumper;
    use List::Util qw(max);
     
    my $mafft = $ARGV[0];
     
    sub print_mafft {
      my ($table, $max, $col) = @_;
     
      $max //= 1;
      my @col_names = $col ? @$col : @{$table->[0]};
      say join "\t", ".", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say join "\t", $line_name, map { ($line->{$_} // $table->[1]->{$_}->{$line_name} // "0") / $max } @col_names;
      }
    }
     
    # Representation en mémoire :
    # @mafft = ( [ qw(p3 p5 p2 p4 p1) ],
    #            { p3 => { p3 => 0 },
    #              p5 => { p3 => 12, p5 => 0 },
    #            ... } );
     
    # Parsing de $mafft
    open my $MAFFT, "<", $mafft or die "Can't read $mafft: $!";
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my (@col_names, @col_matrix_line);
    my $current_line_name;
    my $max = 0;
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        $line =~ s/^\s*//;
        # Initialize the column names vector
        @col_names = @{$mafft[0]} if !@col_names;
        # For each new matrix line, remove the first column name (distance from one to itself)
        if (!@col_matrix_line) {
          $current_line_name = shift @col_names;
          @col_matrix_line = @col_names;
        }
        chomp($line);
        my @columns = split /\s+/, $line;
        # get et remove the col_names which have to be updated with this line
        my @col_file_line = splice @col_matrix_line, 0, scalar(@columns);
        @{$mafft[1]->{$current_line_name}}{@col_file_line} = @columns;
        $max = max($max, @columns);
      }
    }
    print_mafft(\@mafft, $max);
    # Pour voir la matrice non normalisée, utiliser print_mafft(\@mafft)

  4. #44
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour, Et merci beaucoup pour votre réponse.
    Je vais le testé et je vous tiendrai au courant.
    Encore merci.

    Bonne journée et Bon weekend

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. référencement sur une matrice
    Par bni dans le forum C++
    Réponses: 3
    Dernier message: 24/03/2005, 00h06
  2. [PL/SQL] définir une matrice
    Par lalystar dans le forum Oracle
    Réponses: 5
    Dernier message: 22/02/2005, 15h27
  3. [JTable] remplir avec une matrice
    Par ybdz dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2004, 21h03
  4. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

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