【问题标题】:Find local maximum value in the vector在向量中找到局部最大值
【发布时间】:2013-03-21 13:06:00
【问题描述】:

有人可以帮助我。 我使用 Matlab 程序。

假设,我有向量 A,

A = [0 0 1 2 3 5 0 0 0 0 0 2 3 6 7 0 0 0 0 1 1 2 3 4 1]

我想从向量 A 中获取局部最大值和位置。所以,我想得到的答案如下。

ma​​xValue = 5、7 和 4;

ma​​xLocation = 6、15 和 24;

谢谢你的好意。

【问题讨论】:

  • 嗯?你怎么得到 5 7 4 ?
  • 我还不知道如何从数组 A 中得到 5 7 4。但是 maxValue 和 maxLocation 是我会得到的答案。
  • 最大值是7?对?如果你是个孩子,给你 10 个球,你怎么找到最大的?
  • 我需要所有的最大数 [5 7 4]

标签: matlab


【解决方案1】:

如果您有信号处理工具箱,那么 findpeaks 应该是您想要的:

[pks,locs] = findpeaks(A)

为了将来参考,您应该知道您要查找的是局部最大值。说你想找到最大值会让你看起来好像想要全局最大值(在这种情况下是 7)。

【讨论】:

  • 你的回答对我很有帮助。谢谢
【解决方案2】:

您需要更加清楚自己的目标。看起来您希望在向量中找到局部最大值。

你是否总是有你希望找到的具有局部最大值的向量(不是真正的数组,通常是一个表示具有两个非单位维度的事物的词)?你会选择找到所有的局部最大值吗?如果是这样,那么这将起作用......

A = [0 0 1 2 3 5 0 0 0 0 0 4 5 6 7 0 0 0 0 1 1 2 3 4 1];

n = numel(A);
ind = 2:(n-1);

maxLoc = ind(find((diff(ind-1) > 0) & (diff(ind) < 0)));

% in case the max occurs at an end
if A(2) < A(1)
  maxLoc = [1,maxLoc];
end
if A(n) < A(n-1)
  maxLoc = [maxLoc,n];
end

maxVal = A(maxLoc);

但是向量呢

A = [0 1 2 2 1 0];

你现在想看什么?

同样,您需要考虑您的要求。你有什么需求。目标是什么?

一旦你这样做了,那么你的问题将更容易解决,也更容易有人回答。

【讨论】:

    【解决方案3】:

    我假设您正在寻找局部最大值 - 即大于周围的值。

    我的解决方案是这样的:

    Loc = find(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0)+1;
    Val = A(Loc);
    

    Loc 将包含局部最大值的位置,而 Val 将包含那些局部最大值处的值。请注意,它不会像所写的那样在边缘找到最大值。如果你也想检测这些,你必须稍微修改一下:

    Loc = find([A(1)>A(2),(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0),A(end)>A(end-1)]);
    Val = A(Loc);
    

    【讨论】:

      【解决方案4】:

      您想找出每一个出现的 4,5 和 7 吗? 试试:

      Output = find(A>3)
      

      这将返回一个 1xN 向量,其位置超过 3... 不知道这是不是你想要的

      【讨论】:

      • find(A>3) 不是我想要的答案。谢谢你的帮助
      猜你喜欢
      • 2012-12-28
      • 2016-03-16
      • 2020-11-19
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 2014-12-15
      • 2014-04-08
      • 2018-06-09
      相关资源
      最近更新 更多