arraysmatlabloopsrolling-sum

Calculating sum of array elements and reiterate for entire array in MATLAB


I have a vector A of size 7812x1 and would like to calculate the sum of fixed windows of length 21 (so 372 blocks). This should be reiterated, so that the output should return a vector of size 372x1.

I have t=7812, p=372, w=21;

for t=1:p
   out = sum(A((t*w-w+1):(t*w)));
end

This code, however, does not work. My idea is that the part ((t*w-w+1):(t*w)) allows for something like a rolling window. The window is of length 21, so there is not really a need to express is with variables, yet I think it keeps some flexibility.

I've seen potentially related questions (such a partial sum of a vector), yet I'm not sure whether this would result the output desired.


Solution

  • Following your idea of using a rolling/moving window (requires Matlab 2016a or later):

    t = 7812; w = 21; % your parameters
    A = rand(t,1); % generate some test data
    
    B = movsum(A,w); % the sum of a moving window with width w
    out = B(ceil(w/2):w:end); % get every w'th element