movmedian
移动中位数
语法
说明
M = movmedian(___,
为上述任一语法指定 dim
)A
的运算维度。例如,如果 A
是矩阵,则 movmedian(A,k,2)
沿 A
的列运算,计算每行的 k
个元素的移动中位数。
M = movmedian(___,
指定包含还是省略 nanflag
)A
中的 NaN
值。例如,movmedian(A,k,"omitnan")
在计算每个中位数时会忽略 NaN
值。默认情况下,movmedian
包括 NaN
值。
M = movmedian(___,
使用一个或多个名称-值对组参量指定移动中位数的其他参数。例如,如果 Name,Value
)x
是时间值向量,则 movmedian(A,k,"SamplePoints",x)
相对于 x
中的时间计算移动中位数。
示例
向量的中心移动中位数
计算行向量的三点中心移动中位数。当端点处的窗口中少于三个元素时,将根据可用元素计算平均值。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movmedian(A,3)
M = 1×10
6.0000 6.0000 6.0000 -1.0000 -2.0000 -2.0000 -1.0000 3.0000 4.0000 4.5000
向量的尾部移动中位数
计算行向量的三点尾部移动中位数。当端点处的窗口中少于三个元素时,将根据可用元素计算平均值。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movmedian(A,[2 0])
M = 1×10
4 6 6 6 -1 -2 -2 -1 3 4
矩阵的移动中位数
计算矩阵中每行的三点中心移动中位数。窗从第一行开始,沿水平方向移动到该行的末尾,然后移到第二行,依此类推。维度参量为 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 = movmedian(A,3,2)
M = 3×3
6.0000 6.0000 7.0000
-1.5000 -2.0000 -2.5000
1.0000 3.0000 3.5000
排除缺失值的移动中位数
创建一个包含 NaN
值的行向量。
A = [4 8 NaN -1 -2 -3 NaN 3 4 5];
计算向量的三点中心移动中位数,不包括 NaN
值。对于包含任一 NaN
值的窗,movmedian
使用非 NaN
元素进行计算。
M = movmedian(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 = 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 = movmedian(A,k,"SamplePoints",t)
M = 1×6
6.0000 6.0000 6.0000 -1.0000 -2.0000 -2.5000
仅返回满窗口中位数
计算行向量的三点中心移动中位数,但在输出中舍弃使用的点数少于三个的计算。也就是说,只返回从满的三元素窗口计算的中位数,而舍弃端点计算。
A = [4 8 6 -1 -2 -3 -1 3 4 5]; M = movmedian(A,3,"Endpoints","discard")
M = 1×8
6 6 -1 -2 -2 -1 3 4
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组
输入数组,指定为向量、矩阵或多维数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
k
— 窗长度
数值或持续时间标量
窗长度,指定为数值或持续时间标量。当 k
是正整数标量时,中心中位数包括当前位置的元素以及周围的相邻元素。
例如,movmedian(A,3)
计算一个由局部三点中位数值组成的数组。
[kb kf]
— 定向窗长度
包含两个元素的数值或持续时间行向量
定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kb
和 kf
为正整数标量时,将基于 kb+kf+1
个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb
个元素以及当前位置后面的 kf
个元素。
例如,movmedian(A,[2 1])
计算一个由局部四点中位数值组成的数组。
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
维度 dim
表示 movmedian
运算所沿的维度,即指定窗的移动方向。
以一个 m
×n
输入矩阵 A
为例:
movmedian(A,k,1)
为A
的每列计算包含k
个元素的移动中位数,并返回一个m
×n
矩阵。movmedian(A,k,2)
为A
的每行计算包含k
个元素的移动中位数,并返回一个m
×n
矩阵。
nanflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "omitmissing"
| "omitnan"
缺失值条件,指定为下列值之一:
"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 = movmedian(A,k,"Endpoints","fill")
Endpoints
— 窗口接近端点时的处理方法
"shrink"
(默认) | "discard"
| "fill"
| 数值或逻辑标量
窗口接近端点时的处理方法,指定为以下选项之一:
值 | 描述 |
---|---|
"shrink" | 在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。 |
"discard" | 当窗不与现有元素完全重叠时,不输出任何中位数值。 |
"fill" | 将不存在的元素替换为 NaN 值。 |
数值或逻辑标量 | 将不存在的元素替换为指定的数值或逻辑值。 |
SamplePoints
— 用于计算中位数的样本点
向量
用于计算中位数的样本点,指定为向量。样本点表示数据在 A
中的位置。样本点不需要均匀采样。默认情况下,样本点向量为 [1 2 3 ... ]
。
移动窗相对于样本点定义,样本点必须已排序并且包含唯一的元素。例如,如果 t
是与输入数据对应的时间向量,则 movmedian(rand(1,10),3,"SamplePoints",t)
将有一个代表 t(i)-1.5
和 t(i)+1.5
之间时间间隔的窗。
当样本点向量的数据类型为 datetime
或 duration
时,移动窗长度的类型必须为 duration
。
如果样本点的间距不均匀并且指定了 Endpoints
,则其值必须为 "shrink"
。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
对于
gpuArray
数据,最大窗长度为 31。不支持
SamplePoints
名称-值参量。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2016a 中推出R2023a: 指定缺失值条件
使用 "includemissing"
或 "omitmissing"
选项计算每个中位数时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
R2023a: 改进了使用样本点计算矩阵时的性能
当存在样本点时,movmedian
函数对矩阵进行计算时的性能得到了改进。
例如,以下代码计算一个 300×300 矩阵与对应样本点的移动中位数。代码执行速度比上一版本大约快 1.7 倍。
function timingMovmedian A = randn(300); t = sort(rand(300,1)); tic for k = 1:400 movmedian(A,0.1,"SamplePoints",t); end toc end
大致的执行时间是:
R2022b:1.14 秒
R2023a:0.67
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上通过调用 timingMovmedian
函数进行计时的。
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)