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
[email protected]
http://lists.scilab.org/mailman/listinfo/users


_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to