有人可以帮助我。 我使用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获得局部最大值和位置。所以,我想得到的答案是:
maxValue = 5,7和4;
maxLocation = 6,15和24;
谢谢你的好意。
答案 0 :(得分:7)
如果你有信号处理工具箱,那么findpeaks
应该是你想要的:
[pks,locs] = findpeaks(A)
为了将来参考,你应该知道你想要找到的是局部最大值。假设您想要找到最大值,则看起来好像您想要全局最大值(在这种情况下为7)。
答案 1 :(得分: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];
你现在想看到什么?
同样,您需要考虑您的要求。你有什么需求。目标是什么?
一旦你这样做了,那么你的问题将更容易解决,并且更容易让人回答。
答案 2 :(得分:2)
我假设您正在寻找局部最大值 - 即,值大于它们周围的值。
我的解决方案是:
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);
答案 3 :(得分:-2)
你想找到4,5和7的每一次出现吗? 尝试:
Output = find(A>3)
这将返回1xN向量,其中任意位置超过3 ... 不确定这是否是你想要的