Calculating the average and standard deviation in perl
The following two subroutines can be used as a drop in replacement for Math::NumberCruncher. This is useful when trying to limit the number of dependencies of your perl script.
sub average{ my($data) = @_; if (not @$data) { die("Empty array\n"); } my $total = 0; foreach (@$data) { $total += $_; } my $average = $total / @$data; return $average; } sub stdev{ my($data) = @_; if(@$data == 1){ return 0; } my $average = &average($data); my $sqtotal = 0; foreach(@$data) { $sqtotal += ($average-$_) ** 2; } my $std = ($sqtotal / (@$data-1)) ** 0.5; return $std; }Usage:
$ave = &average(\@array); #$ave = Math::NumberCruncher::Average(\@array); //OLD WAY $std = &stdev(\@array); #$std = Math::NumberCruncher::StandardDeviation(\@array); //OLD WAY
No comments:
Post a Comment