vikingy wrote:
Hi all,

Hello,

   I have two files,one is label file,another is thickness file, they are one 
to one correspondence, for example:
   the label file is :          2     2     3      2      1     3     4     5   
  2     5     1     4  ......
   the thickness file is:    0.3  0.8   0.2   0.1   2.4   0.9  3.2  0.2   0.1  
0.3   2.1   2.3 ......
 Now I want to calculate  the sum and mean thickness of the same labeled,  just 
like this:
   label 1 : 2.4
   label 2 : (0.3+0.8+0.1 +0.1)/4
   label 3 : (0.2+2.4)/2
   label 4 : (3.2+2.3)/2
   label 5 : (0.2+0.3)/2
   .......
and then there is also a index [3  4] to select the label, so in the end ,I 
want to get the sum and mean of  (0.2+2.4)/2,  (3.2+2.3)/2.

I'm a beginner to perl, and don't know how to implement this with perl,could 
you give me some suggestion? thanks in advance!

This is one way to do it:

#!/usr/bin/perl
use warnings;
use strict;

use List::Util qw/ sum /;

open my $L, '<', 'label' or die "Cannot open 'label' $!";
my @labels = split ' ', <$L>;
close $L;

my %data;
for my $index ( 0 .. $#labels ) {
    push @{ $data{ $labels[ $index ] } }, $index;
    }

open my $T, '<', 'thickness' or die "Cannot open 'thickness' $!";
my @thicknesses = split ' ', <$T>;
close $T;

for my $label ( keys %data ) {
    for my $index ( @{ $data{ $label } } ) {
        $index = $thicknesses[ $index ];
        }
    }

for my $label ( sort { $a <=> $b } keys %data ) {
    my $sum  = sum @{ $data{ $label } };
    my $mean = $sum / @{ $data{ $label } };
    print "label $label sum: $sum mean: $mean\n";
    }

__END__



John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to