Skip to content
Related Articles

Related Articles

Improve Article

How to Calculate Moving Sum in MATLAB?

  • Last Updated : 18 Oct, 2021
Geek Week

The moving sum of a vector can be referred to as the running sum of each window of some size k in the vector.

Suppose vector = [1 2 3 4 5]

Then the moving sum of each window of size 2 are

[1 2] = 3

[2 3] = 5



[3 4] = 7

[4 5] = 9

Then vector of moving sums is [3 5 7 9]

Matlab allows us to perform this operation effectively using movsum() method. Different syntaxes associated with movsum() method are:

  • M = movsum(A, k)
  • M = movsum(A, [kb kf])
  • M = movsum(___, dim)
  • M = movsum(___, nanflag)

Let us now discuss the above syntax in detail:

movsum(A, k)

  • The method returns an array of k-size window sums of vector A.
  • The returned vector will have the same size as A.
  • If k is odd, then the window is centered about the element in the current position.

Suppose A = [1 2 3 4 5] and k = 3, then sliding window size is 3.

Since k is odd, window is centered at every index and considers one value from left and one value from right into a window.

Then windows are



[1 2] –> Since at first index(i.e value 1) there is no left value, then window gets truncated to size 2

[1 2 3]

[2 3 4]

[3 4 5]

[4 5] —> Since at last index(i.e value 5) there is no right value, then window gets truncated to size 2

  • If k is even, the window is centered on the current and previous elements.
  • When there are few elements in the window, then the window automatically gets truncated and considers the sum of the truncated window.

Matlab




% Input vector
A = [1 2 3 4 5];
disp("Vector :");
disp(A);
 
% Moving sum of A of size 3
M = movsum(A,3);
disp("Moving sum :");
disp(M);

 

 

Output :

 



movsum(A, [kb kf])

 

Returns the moving sum of vector A, with every window, is centered at the present position and having left side kb elements and right side kf elements having a total window of size kb+kf+1.

 

Suppose A = [1 2 3 4 5] and [kb = 2 kf = 0], then sliding window size is kb+kf+1 = 3

At every element previous 2 elements and next 0 elements are considered into the window along with current element.

Then windows are

[1]

[1 2]

[1 2 3]

[2 3 4]

[3 4 5]

 

Matlab




% Input vector
A = [1 2 3 4 5];
disp("Vector :");
disp(A);
 
% Moving sum of A of size 3
% every window having 2 elements
% to left  and 0 elements to the
% right
M = movsum(A,[2 0]);
disp("Moving sum :");
disp(M);

 

 

Output :

 

movsum(___,dim)

  • Returns the moving sum of matrix by calculating across each dimension of dim.
  • dim takes two values 1 or 2 corresponds to operate along each column and along each row respectively.
  • The default value of dim = 1, i.e perform moving sum of matrix across each column.

 



Matlab




% Input vector
A = [1 2 3; 4 5 6; 7 8 9];
disp("Matrix :");
disp(A);
 
% Moving sum of A of size k=3
% along each row(dim=1)
M = movsum(A,3,2);
disp("Moving sum :");
disp(M);

 

 

Output :

 

movsum(___,nanflag)

  • nanflag value decides whether to include or exclude NaN value of the vector in moving sum or not.
  • nanflag takes two values ‘includenan’ or ‘omitnan’ corresponds to including NaN elements and excluding NaN elements respectively.
  • omitNaN’ considers NaN values as 0.

 

Note : NaN + number = NaN

 

Matlab




% Input vector
A = [3 5 NaN 9 0 NaN];
disp("Vector :");
disp(A);
 
% Including NaN values
B = movsum(A,3,'includenan');
disp("Moving sum Include NaN :");
disp(B);
 
% Excluding NaN values
B = movsum(A,3,'omitnan');
disp("Moving sum Exclude NaN :");
disp(B);

Output :




My Personal Notes arrow_drop_up
Recommended Articles
Page :