Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

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


Comment on Re^2: calculate average in sliding windows
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (11)
As of 2014-09-19 16:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (143 votes), past polls