movmad
移动中位数绝对偏差
语法
说明
M = movmad(
返回由局部 A
,k
)k
个数据点的中位绝对偏差 (MAD) 组成的数组,其中每个 MAD 均基于 A
的相邻元素的长度为 k
的滑动窗计算得出。M
与 A
的大小相同。
当 k
为奇数时,窗以当前位置的元素为中心。当 k
为偶数时,窗以当前元素及其前一个元素为中心。当没有足够的元素填满窗时,窗将自动在端点处截断。当窗口被截断时,只根据窗口内的元素计算 MAD。
如果
A
是向量,movmad
将沿向量A
的长度运算。如果
A
是多维数组,则movmad
沿A
的大小不等于 1 的第一个维度进行运算。
M = movmad(___,
指定包含还是省略 nanflag
)A
中的 NaN
值。例如,movmad(A,k,"omitnan")
在计算每个 MAD 时会忽略 NaN
值。默认情况下,movmad
包括 NaN
值。
M = movmad(___,
使用一个或多个名称-值参数指定移动 MAD 的其他参数。例如,如果 Name,Value
)x
是时间值向量,则 movmad(A,k,"SamplePoints",x)
相对于 x
中的时间计算 A
的移动 MAD。
示例
向量的中心移动 MAD
计算行向量的三点中心移动 MAD。当端点处的窗口中少于三个元素时,将基于可用元素进行计算。
A = [1 2 4 -1 -2 -3 -1 3 2 1]; M = movmad(A,3)
M = 1×10
0.5000 1.0000 2.0000 1.0000 1.0000 1.0000 2.0000 1.0000 1.0000 0.5000
向量的尾部移动 MAD
计算行向量的三点尾部移动 MAD。当端点处的窗口中少于三个元素时,将基于可用元素进行计算。
A = [1 2 1 -1 -2 -3 -1 3 4 1]; M = movmad(A,[2 0])
M = 1×10
0 0.5000 0 1.0000 1.0000 1.0000 1.0000 2.0000 1.0000 1.0000
矩阵的移动 MAD
计算矩阵中每行的三点中心移动 MAD。维度参数为 2,即跨 A
的列移动窗口。窗从第一行开始,沿水平方向移动到该行的末尾,然后移到第二行,依此类推。
A = [1 2 1; -1 -2 -3; -1 3 4]
A = 3×3
1 2 1
-1 -2 -3
-1 3 4
M = movmad(A,3,2)
M = 3×3
0.5000 0 0.5000
0.5000 1.0000 0.5000
2.0000 1.0000 0.5000
排除缺失值的移动 MAD
创建一个包含 NaN
值的行向量。
A = [4 8 NaN -1 -2 -3 NaN 3 4 5];
计算向量的三点中心移动 MAD,不包括 NaN
值。对于包含任一 NaN
值的窗,movmad
使用非 NaN
元素进行计算。
M = movmad(A,3,"omitnan")
M = 1×10
2.0000 2.0000 4.5000 0.5000 1.0000 0.5000 3.0000 0.5000 1.0000 0.5000
基于样本点计算移动 MAD
根据时间向量 t
,计算 A
中数据的 3 小时中心移动 MAD。
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 = movmad(A,k,"SamplePoints",t)
M = 1×6
2.0000 2.0000 2.0000 1.0000 1.0000 0.5000
仅返回满窗口 MAD
计算行向量的三点中心移动 MAD,但在输出中舍弃使用的点数少于三个的计算。也就是说,只返回从满的三元素窗口计算的 MAD,而舍弃端点计算。
A = [1 2 1 -1 -2 -3 -1 3 4 1]; M = movmad(A,3,"Endpoints","discard")
M = 1×8
0 1 1 1 1 2 1 1
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组
输入数组,指定为向量、矩阵或多维数组。
k
— 窗长度
数值或持续时间标量
窗长度,指定为数值或持续时间标量。当 k
是正整数标量时,中心 MAD 包括当前位置的元素以及周围的相邻元素。
例如,movmad(A,3)
计算一个由局部三点 MAD 值组成的数组。
[kb kf]
— 定向窗长度
包含两个元素的数值或持续时间行向量
定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kb
和 kf
为正整数标量时,将基于 kb+kf+1
个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb
个元素以及当前位置后面的 kf
个元素。
例如,movmad(A,[2 1])
计算一个由局部四点 MAD 值组成的数组。
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
以一个 m
×n
输入矩阵 A
为例:
movmad(A,k,1)
为A
的每列计算包含k
个元素的滑动 MAD,并返回一个m
×n
矩阵。movmad(A,k,2)
为A
的每行计算包含k
个元素的滑动 MAD,并返回一个m
×n
矩阵。
nanflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "omitmissing"
| "omitnan"
缺失值条件,指定为下列值之一:
"includemissing"
或"includenan"
- 在计算每个 MAD 时包括A
中的NaN
值。如果窗中的任一元素是NaN
,则M
中的对应元素是NaN
。"includemissing"
和"includenan"
具有相同的行为。"omitmissing"
或"omitnan"
- 忽略A
中的NaN
值,并基于较少的点计算每个 MAD。如果窗中的所有元素都是NaN
,则M
中的对应元素是NaN
。"omitmissing"
和"omitnan"
具有相同的行为。
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: M = movmad(A,k,"Endpoints","fill")
Endpoints
— 窗口接近端点时的处理方法
"shrink"
(默认) | "discard"
| "fill"
| 数值或逻辑标量
窗口接近端点时的处理方法,指定为以下选项之一:
值 | 描述 |
---|---|
"shrink" | 在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。 |
"discard" | 当窗口不与现有元素完全重叠时,不输出任何 MAD 值。 |
"fill" | 将不存在的元素替换为 NaN 值。 |
数值或逻辑标量 | 将不存在的元素替换为指定的数值或逻辑值。 |
SamplePoints
— 用于计算 MAD 的样本点
向量
用于计算 MAD 的样本点,指定为向量。样本点表示数据在 A
中的位置。样本点不需要均匀采样。默认情况下,样本点向量为 [1 2 3 ... ]
。
移动窗相对于样本点定义,样本点必须已排序并且包含唯一的元素。例如,如果 t
是与输入数据对应的时间向量,则 movmad(rand(1,10),3,"SamplePoints",t)
将有一个代表 t(i)-1.5
和 t(i)+1.5
之间时间间隔的窗。
当样本点向量的数据类型为 datetime
或 duration
时,移动窗长度的类型必须为 duration
。
如果样本点的间距不均匀并且指定了 Endpoints
,则其值必须为 "shrink"
。
详细信息
中位数绝对偏差
对于由 N 个标量观测值组成的有限长度向量 A,中位数绝对偏差 (MAD) 定义为
,其中 i = 1,2,...,N。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
对于
gpuArray
数据,最大窗长度为 31。不支持
SamplePoints
名称-值参数。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2017a 中推出R2023a: 指定缺失值条件
使用 "includemissing"
或 "omitmissing"
选项计算每个 MAD 时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
R2023a: 改进了使用样本点计算矩阵时的性能
当存在样本点时,movmad
函数对矩阵进行计算时的性能得到了改进。
例如,以下代码计算一个 300×300 矩阵与对应样本点的移动中位数绝对偏差。其执行速度比上一版本大约快 1.3 倍。
function timingMovmad A = randn(300); t = sort(rand(300,1)); tic for k = 1:250 movmad(A,0.1,"SamplePoints",t); end toc end
大致的执行时间是:
R2022b:1.06 秒
R2023a:0.80
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上通过调用 timingMovmad
函数进行计时的。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
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:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
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
- United Kingdom (English)