movmedian
移动中位数
语法
说明
M = movmedian(
返回局部 A
,k
)k
个数据点的中位数值,其中每个中位数基于 A
的相邻元素的长度为 k
的滑动窗计算得出。当 k
为奇数时,窗以当前位置的元素为中心。当 k
为偶数时,窗以当前元素及其前一个元素为中心。当没有足够的元素填满窗时,窗将自动在端点处截断。当窗口被截断时,只根据窗口内的元素计算中位数。M
与 A
的大小相同。
如果
A
是向量,movmedian
将沿向量A
的长度运算。如果
A
是多维数组,则movmedian
沿A
的大小不等于 1 的第一个维度进行运算。如果
A
是表或时间表,则movmedian
沿A
的变量进行运算。 (自 R2025a 起)
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 = 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 = 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 = magic(3); T = array2table(A)
T=3×3 table
A1 A2 A3
__ __ __
8 1 6
3 5 7
4 9 2
使用 movmedian
计算表变量的移动中位数。
M = movmedian(T,3)
M=3×3 table
A1 A2 A3
___ __ ___
5.5 3 6.5
4 5 6
3.5 7 4.5
要仅计算指定变量的移动中位数,请指定 DataVariables
名称-值参量。
M2 = movmedian(T,3,DataVariables=["A2" "A3"])
M2=3×3 table
A1 A2 A3
__ __ ___
8 3 6.5
3 5 6
4 7 4.5
要将移动中位数追加到表而不是替换值,请将 ReplaceValues
指定为 false
。
M3 = movmedian(T,3,ReplaceValues=false)
M3=3×6 table
A1 A2 A3 A1_movmedian A2_movmedian A3_movmedian
__ __ __ ____________ ____________ ____________
8 1 6 5.5 3 6.5
3 5 7 4 5 6
4 9 2 3.5 7 4.5
输入参数
输入数据,指定为向量、矩阵、多维数组、表或时间表。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| table
| timetable
窗长度,指定为数值或持续时间标量。当 k
是正整数标量时,中心中位数包括当前位置的元素以及周围的相邻元素。
例如,movmedian(A,3)
计算一个由局部三点中位数值组成的数组。
定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kb
和 kf
为正整数标量时,将基于 kb+kf+1
个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb
个元素以及当前位置后面的 kf
个元素。
例如,movmedian(A,[2 1])
计算一个由局部四点中位数值组成的数组。
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认值是大小不等于 1 的第一个数组维度。
维度 dim
表示 movmedian
运算所沿的维度,即指定窗的移动方向。
以一个 m
×n
输入矩阵 A
为例:
movmedian(A,k,1)
为A
的每列计算包含k
个元素的移动中位数,并返回一个m
×n
矩阵。movmedian(A,k,2)
为A
的每行计算包含k
个元素的移动中位数,并返回一个m
×n
矩阵。
如果 A
是表或时间表,则无法指定 dim
。movmedian
函数始终沿表和时间表的变量进行运算。 (自 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 = movmedian(A,k,"Endpoints","fill")
窗口接近端点时的处理方法,指定为以下选项之一:
值 | 描述 |
---|---|
"shrink" | 在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。 |
"discard" | 当窗不与现有元素完全重叠时,不输出任何中位数值。 如果 |
"fill" | 将不存在的元素替换为 NaN 值。 |
数值或逻辑标量 | 将不存在的元素替换为指定的数值或逻辑值。 |
用于计算中位数的采样点,指定为向量。采样点表示数据在 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"
。
自 R2025a 起
要对其进行操作的表或时间表变量,指定为下表中的选项之一。
如果未指定
DataVariables
,则movmedian
对所有变量进行运算。此行为是默认行为。如果指定
DataVariables
,则movmedian
只对指定的变量进行运算。未由DataVariables
指定的其他变量会传递给输出,而不会对其进行修改。
索引方案 | 要指定的值 | 示例 |
---|---|---|
变量名称 |
|
|
变量索引 |
|
|
函数句柄 |
|
|
变量类型: |
|
|
自 R2025a 起
替换值指示符,当 A
是表或时间表时,指定为以下值之一。
true
或1
- 在输出表或时间表中,用包含movmedian
输出值的变量替换输入表或时间表变量。false
或0
- 将包含movmedian
输出值的变量追加到输出表或时间表中。
对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues
。
扩展功能
此函数支持 tall 数组,但存在以下限制:
不支持
SamplePoints
、DataVariables
和ReplaceValues
名称-值参量。不支持表和时间表输入。
有关详细信息,请参阅 tall 数组。
用法说明和限制:
不支持
DataVariables
和ReplaceValues
名称-值参量。不支持表和时间表输入。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
movmedian
函数支持 GPU 数组输入,但有以下用法说明和限制:
对于
gpuArray
数据,最大窗长度为 31。不支持
SamplePoints
、DataVariables
和ReplaceValues
名称-值参量。不支持表和时间表输入。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
用法说明和限制:
不支持
DataVariables
和ReplaceValues
名称-值参量。不支持表和时间表输入。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2016a 中推出您可以将表和时间表指定为包含要对其进行运算的数值数据的输入。默认情况下,movmedian
对表或时间表中的所有变量进行运算。不过,您可以指定要对其进行运算的变量。您还可以将 movmedian
的输出值作为新变量追加到输出表或时间表中。
使用 "includemissing"
或 "omitmissing"
选项计算每个中位数时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
当存在采样点时,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 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)