【问题标题】:Find local maxima with logical indexing in MATLAB在 MATLAB 中使用逻辑索引查找局部最大值
【发布时间】:2015-03-11 13:33:48
【问题描述】:

我之前在 MATLAB 向量中使用过逻辑索引来处理类似的条件

X = X(X < 6);

但是,现在我想使用相同的想法找到局部极值,但具有“局部”条件。我会对类似的东西感兴趣

X = X(X(i) > X(i-1) & X(i) > X(i + 1));

我知道这不适用于向量的第一个和最后一个元素,并且有更好的方法可以找到局部极值。

这个问题与上一个问题 (Getting FFT peaks from data) 不同,因为我对找到最大值并不特别感兴趣,而是能够使用逻辑索引和“本地”条件来引用向量中的相邻元素.

【问题讨论】:

  • 向我们展示最小样本输入数据和预期输出?
  • 我认为如果没有某种循环,单独使用逻辑索引是不可能的。
  • 对于相对简单的约束或条件,您可以使用ordfilt2findpeaks。见this SO question

标签: matlab matrix-indexing


【解决方案1】:

您不能按照您的描述直接执行此操作。您将必须创建额外的数据,这些数据本身可能会在逻辑上进行测试,其输出可用于索引到您的向量中。在您的情况下,最好的方法是计算近似导数,并找到该导数的向下零交叉点。

x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');

此代码生成以下图表,其中局部最大值是蓝色星星,局部最小值是绿色圆圈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2013-06-12
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2013-05-05
    相关资源
    最近更新 更多