Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: to calculate mean and variance

by davidrw (Prior)
on Jan 11, 2008 at 03:01 UTC ( #661784=note: print w/ replies, xml ) Need Help??


in reply to to calculate mean and variance

couple general suggestions:

  • use strict; At first, it'll generate a bunch of errors for you for undeclared variables, but it will help identify & reduce errors.
  • Add some debugging statements. (Data::Dumper can be quite helpful, too)
    e.g. the warnings indicate that one of the values it's trying to add to the sum is a string .. so in the first for loop put something like print Dumper  [$i, $fields[$i]] if $fields[$i] =~ /s/;
Hmm .. actually, it might be your split -- try split(' ') instead -- see the split() docs for full info, including that "split(/ /)" will give you as many null initial fields as there are leading spaces. so it could be that your data file has leading spaces in it somewhere.

Here's a little refactoring example, too, to demo several more "perlish" constructs:
#!/usr/bin/perl -w use strict; my @sum; my @sumsq; my $n = 0; while( <DATA> ){ my @fields = split / /; foreach my $i ( 0..$#fields ){ $sum[$i] += $fields[$i]; $sumsq[$i] += $fields[$i]**2; } $n++; } $_ /= $n for @sum, @sumsq; my @stddev = map { sqrt( $sumsq[$_] - $sum[$_]**2 ) } 0 .. $#sum; print join(" ", @stddev) . "\n"; #foreach my $i ( 0 .. $#sum ){ # printf "%5s %10s %10s\n", $i, $sum[$i], $stddev[$i]; #} __DATA__ 1.8 2.5 3.8 1.9 -3.5 -3.5 3.2 -3.9 4.2 4.5 2.8 -1.3 -0.9 -0.7 -0.4 -0.8 -3.5 -3.5 -1.6 -4.5


Comment on Re: to calculate mean and variance
Select or Download Code
Re^2: to calculate mean and variance
by cdfd123 (Initiate) on Jan 11, 2008 at 07:35 UTC
    Thanks may be misconception atyually i want to calculate along the rows __DATA__ 1.8 2.5 3.8 1.9 -3.5 -3.5 3.2 -3.9 4.2 4.5 2.8 -----> calculate mean and variance -1.3 -0.9 -0.7 -0.4 -0.8 -3.5 -3.5 -1.6 -4.5 ---> calculate mean and variance regards
      First, can you use <code></code> tags to display your data? It's hard to see exactly what you're using when it's normal text ...

      Ah -- along rows is even easier .. here's an example:
      #!/usr/bin/perl -w use strict; my @stddev; while( <DATA> ){ my @fields = split ' ', $_; my $N = scalar(@fields); my $sum = 0; $sum += $_ for @fields; my $mean = $sum / $N; $sum = 0; $sum += ($_ - $mean)**2 for @fields; push @stddev, sqrt($sum/$N); } print map {"$_\n"} @stddev; __DATA__ 1.8 2.5 3.8 1.9 -3.5 -3.5 3.2 -3.9 4.2 4.5 2.8 -1.3 -0.9 -0.7 -0.4 -0.8 -3.5 -3.5 -1.6 -4.5
Reaped: Re^2: to calculate mean and variance
by NodeReaper (Curate) on Jan 11, 2008 at 07:35 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://661784]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2015-07-02 02:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls