Moving mean
collapse all in page
Syntax
M = movmean(A,k)
M = movmean(A,[kb kf])
M = movmean(___,dim)
M = movmean(___,nanflag)
M = movmean(___,Name,Value)
Description
example
M = movmean(A,k)
returnsan array of local k
-point mean values, where each mean is calculated overa sliding window of length k
across neighboringelements of A
. When k
is odd,the window is centered about the element in the current position.When k
is even, the window is centered about thecurrent and previous elements. The window size is automatically truncatedat the endpoints when there are not enough elements to fill the window.When the window is truncated, the average is taken over only the elementsthat fill the window. M
is the same size as A
.
If
A
is a vector, thenmovmean
operates along the length of the vectorA
.If
A
is a multidimensional array, thenmovmean
operates along the first dimension ofA
whose size does not equal 1.
example
M = movmean(A,[kb kf])
computesthe mean with a window of length kb+kf+1
that includesthe element in the current position, kb
elementsbackward, and kf
elements forward.
example
M = movmean(___,dim)
specifies the dimension of A
to operate along for any of the previous syntaxes. For example, if A
is a matrix, then movmean(A,k,2)
operates along the columns of A
, computing the k
-element sliding mean for each row.
example
M = movmean(___,nanflag)
specifies whether to include or omit NaN
values in A
. For example, movmean(A,k,"omitnan")
ignores NaN
values when computing each mean. By default, movmean
includes NaN
values.
example
M = movmean(___,Name,Value)
specifies additional parameters for the moving average using one or more name-value arguments. For example, if x
is a vector of time values, then movmean(A,k,"SamplePoints",x)
computes the moving average relative to the times in x
.
Examples
collapse all
Centered Moving Average of Vector
Open Live Script
Compute the three-point centered moving average of a row vector. When there are fewer than three elements in the window at the endpoints, take the average over the elements that are available.
A = [4 8 6 -1 -2 -3 -1 3 4 5];M = movmean(A,3)
M = 1×10 6.0000 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000 4.5000
Trailing Moving Average of Vector
Open Live Script
Compute the three-point trailing moving average of a row vector. When there are fewer than three elements in the window at the endpoints, take the average over the elements that are available.
A = [4 8 6 -1 -2 -3 -1 3 4 5];M = movmean(A,[2 0])
M = 1×10 4.0000 6.0000 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000
Moving Average of Matrix
Open Live Script
Compute the three-point centered moving average for each row of a matrix. The window starts on the first row, slides horizontally to the end of the row, then moves to the second row, and so on. The dimension argument is two, which slides the window across the columns of A
.
A = [4 8 6; -1 -2 -3; -1 3 4]
A = 3×3 4 8 6 -1 -2 -3 -1 3 4
M = movmean(A,3,2)
M = 3×3 6.0000 6.0000 7.0000 -1.5000 -2.0000 -2.5000 1.0000 2.0000 3.5000
Moving Average of Vector with Missing Values
Open Live Script
Compute the three-point centered moving average of a row vector containing two NaN
elements.
A = [4 8 NaN -1 -2 -3 NaN 3 4 5];M = movmean(A,3)
M = 1×10 6.0000 NaN NaN NaN -2.0000 NaN NaN NaN 4.0000 4.5000
Recalculate the average, but omit the NaN
values. When movmean
omits NaN
elements, it computes the average over the remaining elements in the window.
M = movmean(A,3,"omitnan")
M = 1×10 6.0000 6.0000 3.5000 -1.5000 -2.0000 -2.5000 0 3.5000 4.0000 4.5000
Sample Points for Moving Average
Open Live Script
Compute a 3-hour centered moving average of the data in A
according to the time vector t
.
A = [4 8 6 -1 -2 -3];k = hours(3);t = datetime(2016,1,1,0,0,0) + hours(0:5)
t = 1x6 datetime 01-Jan-2016 00:00:00 01-Jan-2016 01:00:00 01-Jan-2016 02:00:00 01-Jan-2016 03:00:00 01-Jan-2016 04:00:00 01-Jan-2016 05:00:00
M = movmean(A,k,"SamplePoints",t)
M = 1×6 6.0000 6.0000 4.3333 1.0000 -2.0000 -2.5000
Return Only Full-Window Averages
Open Live Script
Compute the three-point centered moving average of a row vector, but discard any calculation that uses fewer than three points from the output. In other words, return only the averages computed from a full three-element window, discarding endpoint calculations.
A = [4 8 6 -1 -2 -3 -1 3 4 5];M = movmean(A,3,"Endpoints","discard")
M = 1×8 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000
Input Arguments
collapse all
A
— Input array
vector | matrix | multidimensional array
Input array, specified as a vector, matrix, or multidimensionalarray.
k
— Window length
numeric or duration scalar
Window length, specified as a numeric or duration scalar. When k
is a positive integer scalar, the centered average includes the element in the current position plus surrounding neighbors.
For example, movmean(A,3)
computes an array of local three-point mean values.
[kb kf]
— Directional window length
numeric or duration row vector containing two elements
Directional window length, specified as a numeric or duration row vector containing two elements. When kb
and kf
are positive integer scalars, the calculation is over kb+kf+1
elements. The calculation includes the element in the current position, kb
elements before the current position, and kf
elements after the current position.
For example, movmean(A,[2 1])
computes an array of local four-point mean values.
dim
— Dimension to operate along
positive integer scalar
Dimension to operate along, specified as a positive integer scalar. If you do not specify the dimension, then the default is the first array dimension of size greater than 1.
Dimension dim
indicates the dimension that movmean
operatesalong, that is, the direction in which the specified window slides.
Consider an m
-by-n
input matrix, A
:
movmean(A,k,1)
computes thek
-element sliding mean for each column ofA
and returns anm
-by-n
matrix.movmean(A,k,2)
computes thek
-element sliding mean for each row ofA
and returns anm
-by-n
matrix.
nanflag
— Missing value condition
"includemissing"
(default) | "includenan"
| "omitmissing"
| "omitnan"
Missing value condition, specified as one of these values:
"includemissing"
or"includenan"
— IncludeNaN
values inA
when computing each mean. If any element in the window isNaN
, then the corresponding element inM
isNaN
."includemissing"
and"includenan"
have the same behavior."omitmissing"
or"omitnan"
— IgnoreNaN
values inA
and compute each mean over fewer points. If all elements in the window areNaN
, then the corresponding element inM
isNaN
."omitmissing"
and"omitnan"
have the same behavior.
Name-Value Arguments
Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN
, where Name
is the argument name and Value
is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose Name
in quotes.
Example: M = movmean(A,k,"Endpoints","fill")
Endpoints
— Method to treat windows near endpoints
"shrink"
(default) | "discard"
| "fill"
| numeric or logical scalar
Method to treat windows near endpoints, specified as one of these options:
Value | Description |
---|---|
"shrink" | Shrink the window size near the endpoints of the input to include only existing elements. |
"discard" | Do not output any average values when the window does not completely overlap with existing elements. |
"fill" | Replace nonexisting elements with NaN . |
numeric or logical scalar | Replace nonexisting elements with the specified numeric or logical value. |
SamplePoints
— Sample points for computing averages
vector
Sample points for computing averages, specified as a vector. The sample points represent the locations of the data in A
. Sample points do not need to be uniformly sampled. By default, the sample points vector is [1 2 3 ... ]
.
Moving windows are defined relative to the sample points, which must be sorted and contain unique elements. For example, if t
is a vector of times corresponding to the input data, then movmean(rand(1,10),3,"SamplePoints",t)
has a window that represents the time interval between t(i)-1.5
and t(i)+1.5
.
When the sample points vector has data type datetime
or duration
, then the moving window length must have type duration
.
If the sample points are nonuniformly spaced and Endpoints
is specified, then its value must be "shrink"
.
More About
collapse all
Mean
For a finite-length vector A made up of N scalar observations, the mean is defined as
Extended Capabilities
Tall Arrays
Calculate with arrays that have more rows than fit in memory.
This function supports tall arrays with the limitations:
The
SamplePoints
name-value argument is not supported.
For more information, see Tall Arrays.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Thread-Based Environment
Run code in the background using MATLAB® backgroundPool
or accelerate code with Parallel Computing Toolbox™ ThreadPool
.
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Usage notes and limitations:
The
SamplePoints
name-value argument is not supported.
For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced in R2016a
expand all
R2023a: Specify missing value condition
Include or omit missing values in the input array when computing each mean by using the "includemissing"
or "omitmissing"
options. These options have the same behavior as the "includenan"
and "omitnan"
options, respectively.
R2023a: Improved performance when computing over matrix with sample points
The movmean
function shows improved performance when computing over a matrix when there are sample points.
For example, this code computes the moving mean of a 300-by-300 matrix with corresponding sample points. The code is about 1.9x faster than in the previous release.
function timingMovmeanA = randn(300);t = sort(rand(300,1));ticfor k = 1:2000 movmean(A,0.1,"SamplePoints",t);endtocend
The approximate execution times are:
R2022b: 1.04 s
R2023a: 0.56
The code was timed on a Windows® 10, Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz test system by calling the timingMovmean
function.
See Also
Functions
- movmedian | movvar | movstd | movsum | movmad | mean | smoothdata
Topics
- Data Smoothing and Outlier Detection
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office