我正在尝试使用MATLAB找到数字向量的local maxima。内置的findpeaks函数适用于以下向量:
[0 1 2 3 2 1 1 2 3 2 1 0]
其中峰值(每个3
)仅占据向量中的一个位置,但如果我有一个向量,则:
[0 1 2 3 3 2 1 1 2 3 2 1 0]
第一个“峰值”占据向量中的两个位置,而findpeaks
函数不会将其拾取。
有没有一种很好的方法来编写一个最大值发现函数来检测这些峰值?
答案 0 :(得分:3)
您可以使用图像处理工具箱中的REGIONALMAX功能:
>> x = [0 1 2 3 3 2 1 1 2 3 2 1 0]
x =
0 1 2 3 3 2 1 1 2 3 2 1 0
>> idx = imregionalmax(x)
idx =
0 0 0 1 1 0 0 0 0 1 0 0 0
答案 1 :(得分:-1)
a = [ 0 1 2 3 3 2 1 2 3 2 1 ];
sizeA = length(a);
result = max(a);
for i=1:sizeA,
if a(i) == result(1)
result(length(result) + 1) = i;
end
end
result
包含max,后跟所有等于max。
答案 2 :(得分:-1)
更容易:
a = [1 2 4 5 5 3 2];
b = find(a == max(a(:)));
输出:
b = [4,5]