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

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