Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

islocalmax

计算局部最大值

说明

示例

当在 A 的对应元素中检测到局部最大值时,TF = islocalmax(A) 将返回元素为 1 (true) 的逻辑数组。

示例

TF = islocalmax(A,dim) 指定要沿其进行运算的 A 的维度。例如,islocalmax(A,2) 计算矩阵 A 的每一行的局部最大值。

示例

TF = islocalmax(___,Name,Value) 支持上述语法中的任何输入参数组合,且可使用一个或多个名称-值参数指定其他用于求局部最大值的参数。例如,islocalmax(A,'SamplePoints',t) 根据时间向量 t 中包含的时间戳计算 A 的局部最大值。

示例

[TF,P] = islocalmax(___) 还返回与 A 的每个元素对应的相对高差

示例

全部折叠

计算并绘制数据向量的局部最大值。

x = 1:100;
A = (1-cos(2*pi*0.01*x)).*sin(2*pi*0.15*x);
TF = islocalmax(A);
plot(x,A,x(TF),A(TF),'r*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

创建一个数据矩阵,然后计算每一行的局部最大值。

A = 25*diag(ones(5,1)) + rand(5,5);
TF = islocalmax(A,2)
TF = 5x5 logical array

   0   0   1   0   0
   0   1   0   0   0
   0   0   1   0   0
   0   1   0   1   0
   0   1   0   0   0

计算数据向量相对于向量 t 中的时间戳的局部最大值。使用 MinSeparation 参数计算相隔至少 45 分钟的最大值。

t = hours(linspace(0,3,15));
A = [2 4 6 4 3 7 5 6 5 10 4 -1 -3 -2 0];
TF = islocalmax(A,'MinSeparation',minutes(45),'SamplePoints',t);
plot(t,A,t(TF),A(TF),'r*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

指定用于指示连续最大值的方法。

计算包含连续最大值的数据的局部最大值。指示每个平台区的第一个最大值。

x = 0:0.1:5;
A = min(0.75, sin(pi*x));
TF1 = islocalmax(A,'FlatSelection','first');
plot(x,A,x(TF1),A(TF1),'r*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

指示每个平台区的所有最大值。

TF2 = islocalmax(A,'FlatSelection','all');
plot(x,A,x(TF2),A(TF2),'r*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

根据相对高差选择最大值。

计算数据向量的局部最大值和相对高差,然后用数据绘图。

x = 1:100;
A = peaks(100);
A = A(50,:);
[TF1,P] = islocalmax(A);
P(TF1)
ans = 1×2

    1.7703    3.5548

plot(x,A,x(TF1),A(TF1),'r*')
axis tight

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

通过指定最小相对高差要求,仅计算数据中最突出的最大值。

TF2 = islocalmax(A,'MinProminence',2);
plot(x,A,x(TF2),A(TF2),'r*')
axis tight

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

输入参数

全部折叠

输入数据,指定为向量、矩阵、多维数组、表或时间表。

运算维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。

以一个 m×n 输入矩阵 A 为例:

  • islocalmax(A,1) 根据 A 的每列中的数据计算局部最大值,并返回一个 m×n 矩阵。

    islocalmax(A,1) column-wise operation

  • islocalmax(A,2) 根据 A 的每行中的数据计算局部最大值,并返回一个 m×n 矩阵。

    islocalmax(A,2) row-wise operation

对于表或时间表输入数据,不支持 dim,并且分别对每个表或时间表变量进行运算。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: TF = islocalmax(A,'MinProminence',2)

数据选项

全部折叠

采样点,指定为由采样点值组成的向量或下表中的选项之一(当输入数据为表时)。样本点代表数据的 x 轴位置,必须为有序且包含唯一的元素。样本点不需要均匀采样。向量 [1 2 3 ...] 是默认值。

当输入数据是表时,可以使用以下选项之一将采样点指定为表变量:

索引方案示例

变量名称:

  • 字符串标量或字符向量

  • "A"'A' - 名为 A 的变量

变量索引:

  • 引用变量在表中位置的索引编号

  • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false

  • 3 - 表中的第三个变量

  • [false false true] - 第三个变量

函数句柄:

  • 函数句柄,以表变量作为输入并返回逻辑标量

  • @isnumeric - 一个包含数值的变量

变量类型:

  • vartype 下标,用于选择一个指定类型的变量

  • vartype("numeric") - 一个包含数值的变量

注意

当输入数据为 timetable 时,不支持此名称-值参数。时间表使用行时间向量作为采样点。要使用不同采样点,您必须编辑时间表,以便行时间包含所需的采样点。

示例: islocalmax(A,'SamplePoints',0:0.1:10)

示例: islocalmax(T,'SamplePoints',"Var1")

要对其进行操作的表变量,指定为下表中的选项之一。DataVariables 值指示输入表中哪些变量要检查局部最大值的存在。与指示的变量关联的数据类型必须为数值或 logical

对于 DataVariables 未指定的变量,第一个输出 TF 包含 false,除非 OutputFormat 的值为 'tabular'

索引方案示例

变量名称:

  • 字符串、字符向量或元胞数组

  • pattern 对象

  • "A"'A' - 名为 A 的变量

  • ["A","B"]{'A','B'} - 两个名为 AB 的变量

  • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

变量索引:

  • 引用变量在表中位置的索引编号

  • 由数字组成的向量

  • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false

  • 3 - 表中的第三个变量

  • [2 3] - 表中的第二个和第三个变量

  • [false false true] - 第三个变量

函数句柄:

  • 函数句柄,以表变量作为输入并返回逻辑标量

  • @isnumeric - 所有包含数值的变量

变量类型:

  • vartype 下标,用于选择指定类型的变量

  • vartype("numeric") - 所有包含数值的变量

示例: islocalmax(T,'DataVariables',["Var1" "Var2" "Var4"])

输出数据类型,指定为下列值之一:

  • 'logical' - 对于表或时间表输入数据,以逻辑数组形式返回输出 TF

  • 'tabular' - 对于表输入数据,以表形式返回输出 TF。对于时间表输入数据,以时间表形式返回输出 TF

对于向量、矩阵或多维数组输入数据,不支持 OutputFormat

示例: islocalmax(T,'OutputFormat','tabular')

极值检测选项

全部折叠

最小相对高差,指定为非负标量。islocalmax 仅返回相对高差至少等于指定值的局部最大值。

相对高差窗口,指定为正整数标量、由正整数组成的二元素向量、正持续时间标量或由正持续时间组成的二元素向量。该值定义一个包含若干邻点的窗口,这些邻点用于计算每个局部最大值的相对高差。

如果窗口值是一个正整数标量 k,则窗口以每个局部最大值为中心并且包含 k-1 个相邻元素。如果 k 是偶数,则窗口以当前元素和上一个元素为中心。如果局部最大值在平台区内,则 islocalmax 将整个平台区视为窗口的中心点。

如果该值是由正整数组成的二元素向量 [b f],则窗口包含局部最大值、其之前的 b 个元素和之后的 f 个元素。如果某局部最大值在平台区内,则窗口从平台区的第一个点之前的 b 个元素开始,在平台区的最后一个点之后的 f 个元素结束。

当输入数据是时间表或 SamplePoints 指定为 datetimeduration 向量时,窗口值的类型必须为 duration,并相对于样本点计算窗口。

局部最大值连续重复时的平台区指示符,指定为以下值之一:

  • 'center' - 仅指示最大值平台区的中心元素。与平台区中心元素对应的 TF 元素为 1,其余元素为 0。

  • 'first' - 仅指示最大值平台区的第一个元素。与平台区第一个元素对应的 TF 元素为 1,其余元素为 0。

  • 'last' - 仅指示最大值平台区的最后一个元素。与平台区最后一个元素对应的 TF 元素为 1,其余元素为 0。

  • 'all' - 指示最大值平台区的所有元素。平台区所有元素对应的 TF 元素均为 1。

当使用 MinSeparationMaxNumExtrema 名称-值参数时,平台区上的各点会被视为一个最大值点。

局部最大值之间的最小间隔,指定为非负标量。间隔值按照与样本点向量相同的单位定义,默认情况下为 [1 2 3 ...]。当间隔值大于 0 时,islocalmax 选择指定间隔内最大的局部最大值,并忽略其他所有局部最大值。此过程会重复执行,直到再也检测不到局部最大值为止。

当样本点向量的类型为 datetime 时,间隔值的类型必须为 duration

最大值的最大数目,指定为正整数标量。islocalmax 找到的数目不超过指定的显著最大值数,此值默认情况下等于运算维度的长度。

输出参数

全部折叠

局部最大值指示符,以向量、矩阵、多维数组、表或时间表形式返回。

除非 OutputFormat 的值为 'tabular',否则 TFA 的大小相同。如果 OutputFormat 的值为 'tabular',则 TF 只具有对应于指定的 DataVariables 的变量。

数据类型: logical

相对高差,以向量、矩阵、多维数组、表或时间表形式返回。

  • 如果 P 是向量、矩阵或多维数组,则 P 的大小与 A 相同。

  • 如果 P 是表或时间表,则 PA 的高度相同,并且只具有与指定的 DataVariables 对应的变量。

如果输入数据的类型是有符号或无符号整数,则 P 是无符号整数。

详细信息

全部折叠

局部最大值的相对高差

局部最大值(或波峰)的相对高差根据该波峰相对其他波峰的高度和位置来衡量其突出程度。

要测量一个波峰的相对高差,首先从该波峰延伸一条水平线。找出这条直线与左右两侧数据的交点,交点应为另一个波峰或数据的端点。将这些位置标记为左右区间的外部端点。然后找到两个区间内的最低的波谷。取这两个波谷的较大值,测量从该波谷到波峰的垂直距离。此距离就是相对高差。

对于向量 x,最大相对高差不超过 max(x)-min(x)

扩展功能

版本历史记录

在 R2017b 中推出

全部展开