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/