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/