Re: Moving average type process
- To: mathgroup at smc.vnet.net
 - Subject: [mg18227] Re: [mg18221] Moving average type process
 - From: Maarten.vanderBurgt at icos.be
 - Date: Thu, 24 Jun 1999 14:24:13 -0400
 - Sender: owner-wri-mathgroup at wolfram.com
 
Virgil,
Try the following:
First partition your inlist  in vectors of length 3 ( = Length[wtlist])
with an offset of one.
Then make the scalar product of each of these vectors with vector wtlist.
This gives you the moving average with weights. It is implemted in the
function movave below. As shown in Out[4], it is also fairly fast.
In[1]:= movave[wtlist_, inlist_]:= (wtlist . #1)& /@ Partition[inlist,
Length[wtlist], 1]
In[2]:= movave[{w1,w2,w3},{a,b,c,d,e}]
Out[2]= {a w1+b w2+c w3,b w1+c w2+d w3,c w1+d w2+e w3}
In[3]:= w={1.3,5.2,3.2};
        in = Table[Random[Real,{-10,10}],{10000}];
In[4]:= movave[w,in];//Timing
Out[4]= {0.211 Second,Null}
Maarten
_______________________________________________________________
Maarten van der Burgt
ICOS Vision Systems
Esperantolaan 9
B-3001 Leuven, Belgium
tel. + 32 16 398220; direct + 32 16 398316; fax. + 32 16 400067
e-mail: maarten.vanderburgt at icos.be
_______________________________________________________________
Virgil Stokes <virgil.stokes at neuro.ki.se> on 23-06-99 02:41:14 AM
Subject: [mg18227]  [mg18221] Moving average type process
I wish to perform the following "moving average" type process on
a list to generate a new list:
Inputs:
  wtlist = {w1,w2,w3}     -- weight list
  inlist = {a,b,c,d,e,f}  -- any other list (>= 3 elements)
Output:
  outlist = {w1*a+w2*b+w3*c, w1*b+w2*c+w3*d, w1*c+w2*d+w3*e,
w1*d+w2*e+w3*f}
Note, outlist will always contain 2 less (Length[wtlist]/2) elements
than in the input list (inlist).
If w1=w2=w3=x, then
the following works fine:
outlist = x*Drop[Plus@@NestList[RotateRight,inlist,2],2]
This is a weighted (from wtlist) sum over another list of arbitrary
length (inlist). I would like to get a "fast" function for doing this when
the weights are not equal.
-- Virgil