movmean
移动均值
语法
说明
M = movmean(___, 指定包含还是省略 nanflag)A 中的 NaN 值。例如,movmean(A,k,"omitnan") 在计算每个均值时会忽略 NaN 值。默认情况下,movmean 包括 NaN 值。
M = movmean(___, 使用一个或多个名称-值参量指定移动平均值的其他参数。例如,如果 Name,Value)x 是时间值向量,则 movmean(A,k,"SamplePoints",x) 相对于 x 中的时间计算移动平均值。
示例
计算行向量的三点中心移动平均值。当端点处的窗口中少于三个元素时,将根据可用元素计算平均值。
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
计算行向量的三点尾部移动平均值。当端点处的窗口中少于三个元素时,将根据可用元素计算平均值。
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
计算矩阵中每行的三点中心移动平均值。窗从第一行开始,沿水平方向移动到该行的末尾,然后移到第二行,依此类推。维度参量为 2,即跨 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
计算包含两个 NaN 元素的行向量的三点中心移动平均值。
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
重新计算平均值,但忽略 NaN 值。当 movmean 忽略 NaN 元素时,它将根据窗中的剩余元素计算平均值。
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
根据时间向量 t,计算 A 中数据的 3 小时中心移动平均值。
A = [4 8 6 -1 -2 -3]; k = hours(3); t = datetime(2016,1,1,0,0,0) + hours(0:5)
t = 1×6 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
计算行向量的三点中心移动平均值,但在输出中舍弃使用的点数少于三个的计算。也就是说,只返回从满的三元素窗口计算的平均值,而舍弃端点计算。
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
从幻方的列创建一个表。
A = magic(3); T = array2table(A)
T=3×3 table
A1 A2 A3
__ __ __
8 1 6
3 5 7
4 9 2
使用 movmean 计算表变量的移动平均值。
M = movmean(T,3)
M=3×3 table
A1 A2 A3
___ __ ___
5.5 3 6.5
5 5 5
3.5 7 4.5
要仅计算指定变量的移动平均值,请指定 DataVariables 名称-值参量。
M2 = movmean(T,3,DataVariables=["A2" "A3"])
M2=3×3 table
A1 A2 A3
__ __ ___
8 3 6.5
3 5 5
4 7 4.5
要将移动平均值追加到表而不是替换值,请将 ReplaceValues 指定为 false。
M3 = movmean(T,3,ReplaceValues=false)
M3=3×6 table
A1 A2 A3 A1_movmean A2_movmean A3_movmean
__ __ __ __________ __________ __________
8 1 6 5.5 3 6.5
3 5 7 5 5 5
4 9 2 3.5 7 4.5
输入参数
输入数据,指定为向量、矩阵、多维数组、表或时间表。
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable
窗长度,指定为数值或持续时间标量。当 k 是正整数标量时,中心平均值包括当前位置的元素以及周围的相邻元素。
例如,movmean(A,3) 计算一个由局部三点均值组成的数组。

定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kb 和 kf 为正整数标量时,将基于 kb+kf+1 个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb 个元素以及当前位置后面的 kf 个元素。
例如,movmean(A,[2 1]) 计算一个由局部四点均值组成的数组。
![movmean(A,[2 1]) computation. The elements in the sample window are 4, 1, 3, and 5, so the resulting local mean is 3.25.](movmean_windowing.png)
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认值是大小不等于 1 的第一个数组维度。
维度 dim 表示 movmean 运算所沿的维度,即指定窗的移动方向。
以一个 m×n 输入矩阵 A 为例:
movmean(A,k,1)为A的每列计算包含k个元素的移动均值,并返回一个m×n矩阵。
movmean(A,k,2)为A的每行计算包含k个元素的移动均值,并返回一个m×n矩阵。
如果 A 是表或时间表,则无法指定 dim。movmean 函数始终沿表和时间表的变量进行运算。 (自 R2025a 起)
缺失值条件,指定为下列值之一:
"includemissing"或"includenan"- 在计算每个均值时包括A中的NaN值。如果窗中的任一元素是NaN,则M中的对应元素是NaN。"includemissing"和"includenan"具有相同的行为。"omitmissing"或"omitnan"- 忽略A中的NaN值,并基于较少的点计算每个均值。如果窗中的所有元素都是NaN,则M中的对应元素是NaN。"omitmissing"和"omitnan"具有相同的行为。
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: M = movmean(A,k,"Endpoints","fill")
窗口接近端点时的处理方法,指定为以下选项之一:
| 值 | 描述 |
|---|---|
"shrink" | 在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。 |
"discard" | 当窗不与现有元素完全重叠时,不输出任何平均值。 如果 |
"fill" | 将不存在的元素替换为 NaN 值。 |
| 数值或逻辑标量 | 将不存在的元素替换为指定的数值或逻辑值。 |
用于计算平均值的样本点,指定为向量。样本点表示数据在 A 中的位置。采样点不需要均匀采样。默认情况下,采样点向量为 [1 2 3 ... ]。
移动窗相对于样本点定义,样本点必须已排序并且包含唯一的元素。例如,如果 t 是与输入数据对应的时间向量,则 movmean(rand(1,10),3,"SamplePoints",t) 将有一个代表 t(i)-1.5 和 t(i)+1.5 之间时间间隔的窗。
当样本点向量的数据类型为 datetime 或 duration 时,移动窗长度的类型必须为 duration。
如果采样点的间距不均匀并且指定了 Endpoints,则其值必须为 "shrink"。
自 R2025a 起
要对其进行操作的表或时间表变量,指定为下表中的选项之一。
如果未指定
DataVariables,则movmean对所有变量进行运算。此行为是默认行为。如果指定
DataVariables,则movmean只对指定的变量进行运算。未由DataVariables指定的其他变量会传递给输出,而不会对其进行修改。
| 索引方案 | 要指定的值 | 示例 |
|---|---|---|
变量名称 |
|
|
变量索引 |
|
|
函数句柄 |
|
|
变量类型: |
|
|
自 R2025a 起
替换值指示符,当 A 是表或时间表时,指定为以下值之一。
true或1- 在输出表或时间表中,用包含movmean输出值的变量替换输入表或时间表变量。false或0- 将包含movmean输出值的变量追加到输出表或时间表中。
对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues。
详细信息
对于由 N 标量观测值组成的有限长向量 A,均值定义为
扩展功能
此函数支持 tall 数组,但存在以下限制:
不支持
SamplePoints、DataVariables和ReplaceValues名称-值参量。不支持表和时间表输入。
有关详细信息,请参阅 tall 数组。
用法说明和限制:
不支持
DataVariables和ReplaceValues名称-值参量。不支持表和时间表输入。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
movmean 函数支持 GPU 数组输入,但有以下用法说明和限制:
不支持
SamplePoints、DataVariables和ReplaceValues名称-值参量。不支持表和时间表输入。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
用法说明和限制:
不支持
DataVariables和ReplaceValues名称-值参量。不支持表和时间表输入。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2016a 中推出您可以将表和时间表指定为包含要对其进行运算的数值数据的输入。默认情况下,movmean 对表或时间表中的所有变量进行运算。不过,您可以指定要对其进行运算的变量。您还可以将 movmean 的输出值作为新变量追加到输出表或时间表中。
使用 "includemissing" 或 "omitmissing" 选项计算每个均值时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan" 和 "omitnan" 选项相同。
当存在样本点时,movmean 函数对矩阵进行计算时的性能得到了改进。
例如,以下代码计算一个 300×300 矩阵与对应样本点的移动均值。代码执行速度比上一版本大约快 1.9 倍。
function timingMovmean A = randn(300); t = sort(rand(300,1)); tic for k = 1:2000 movmean(A,0.1,"SamplePoints",t); end toc end
大致的执行时间是:
R2022b:1.04 秒
R2023a:0.56
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上通过调用 timingMovmean 函数进行计时的。
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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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
- United Kingdom (English)