### Re^2: calculate average in sliding windows

by Eliya (Vicar)
 on May 23, 2012 at 11:47 UTC ( #972016=note: print w/replies, xml ) Need Help??

in reply to Re: calculate average in sliding windows
in thread calculate average in sliding windows

A less computationally intensive variant would be to directly maintain a \$sum, to which you add/subtract individual values (instead of push/shift on an array, from which you then recompute the sum every time):

```#!/usr/bin/perl -lw
use strict;
use constant WINDOW => 10;

#my @data  = map int( rand 10 ), 1 .. 30;
my @data = qw(3 8 8 2 5 5 0 3 8 3 2 3 2 3 5 4 8 7 5 4 6 3 1 6 3 6 0 7
+3 3);

my @mAves;
my \$sum = 0;
for my \$i (0..\$#data) {
\$sum += \$data[\$i];
\$sum -= \$data[\$i-WINDOW()] if \$i >= WINDOW;
push @mAves, \$sum / WINDOW if \$i >= WINDOW-1;
}

print join ' ', @data;
print join '   ', @mAves;

__END__
3 8 8 2 5 5 0 3 8 3 2 3 2 3 5 4 8 7 5 4 6 3 1 6 3 6 0 7 3 3
4.5   4.4   3.9   3.3   3.4   3.4   3.3   4.1   4.5   4.2   4.3   4.7
+  4.7   4.6   4.9   4.7   4.9   4.1   4.1   3.9   3.8

Create A New User
Node Status?
node history
Node Type: note [id://972016]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2017-11-20 16:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
In order to be able to say "I know Perl", you must have:

Results (288 votes). Check out past polls.

Notices?