[Scilab-users] Running average

CRETE Denis denis.crete at thalesgroup.com
Tue Feb 12 14:27:33 CET 2013


Thank you, Serge !


-----Message d'origine-----
De : users-bounces at lists.scilab.org [mailto:users-bounces at lists.scilab.org] De la part de Serge Steer
Envoyé : mardi 12 février 2013 14:02
À : International users mailing list for Scilab.
Objet : Re: [Scilab-users] Running average

You can use the convolution (convol function) for such purpose

sv=10000;v=rand(sv,1); km=5;
vra_1 =convol(ones(1,2*km+1)/(2*km+1),v);
vra_1=vra_1(km+1:$-km);

Serge Steer

Le 12/02/2013 00:08, CRETE Denis a écrit :
> Hello,
> I looked for a function to make a "running average", i.e. an average of a sub vector v:
> sv=10000;v=rand(sv,1); km=5; // Running average over 2*km+1 = 11 
> points for i=1:size(v,'*'),
> 	suite=i-min(i-1,km):i+min(size(v,'*')-i,km);
> 	vra_1(i)=sum(v(suite))/size(suite,'*');
> end;
> Is there a function doing already this in Scilab, or is there a more efficient (compact/rapid) way to do this ?
> I tried with sparse matrix (with a "broad diagonal"), but it is much longer:
> // Build sparse matrix
> spM=[];
> for i=1:sv,
> 	for j=-km:km;
> 		if (i+j>0 & i+j-1<sv), spM=[spM;i,i+j,1]; end;
> 	end;
> 	im=find(spM(:,1)==i);
> 	spM(im,3)=1./size(im,'*');
> end;
> // Calculate running average
> vra_2=sparse(spM(:,1:2),spM(:,3))*v;
>
> Thank you in advance for any improvement.
> Best regards
> Denis
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>

_______________________________________________
users mailing list
users at lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users



More information about the users mailing list