matlab - 如何找到多个区间内的最大值?

标签 matlab max octave

我有两个数组,der_posder_neg,其中包含数组插值的索引。我想获取间隔中插值最大值的所有索引:

der_pos(1):der_neg(1)
der_pos(2):der_neg(2)
etc...

例如:

interpolated = [1,5,3,2,7,10,8,14,4]
der_pos = [1,6]
der_neg = [4,9]

所以,我想获取索引:

[2,8]

因为:

  • 在区间 der_pos(1):der_neg(1)1:4interpolated(1:4) = [1, 5,3,2] 最大值为 5,位于索引 2 处。

  • 在区间 der_pos(2):der_neg(2)6:9interpolated(6:9) = [10, 8,14,4] 最大值为 14,位于索引 8 处。

我设法使用 for 循环来做到这一点:

interpolated = [1,5,3,2,7,10,8,14,4];

der_pos = [1,6];
der_neg = [4,9];

indices = zeros(1,length(der_pos));
for i = [1:length(der_pos)]
    [peak, index] = max(interpolated(der_pos(i):der_neg(i)));
    indices(i) = index + der_pos(i) - 1;
endfor

indices % gives [2,8]

但是有没有更简洁的方法来做到这一点?

最佳答案

这是一个示例代码。函数 findpeaks 返回所有峰值。然后,循环保留所需范围内的峰值索引。

我添加了一个测试,以避免在未找到峰值的情况下出现错误(索引将为-1),并在找到两个峰值时保留第一个峰值。如果您想将所有峰值保留在一个区间内,您可以使用单元格

interpolated = [1,5,3,2,7,10,8,14,4];
der_pos = [1 6 7 ];
der_neg = [4 9 8];

[~,i]=findpeaks(interpolated);
indices= -1+zeros(size(der_pos,2),1);
for loopi = 1:length(i)
    val = i(i>=der_pos(loopi)&i<=der_neg(loopi));
    if ~isempty(val)
        indices(loopi) = val(1);
    end
end

关于matlab - 如何找到多个区间内的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47448262/

相关文章:

haskell - x 在 f(x) 最大的列表中

matlab - 如何在 GNU Octave/Matlab 中计算向量的 GCD

c++ - 从 C++ DLL 到 Matlab 的解析时间

matlab - 如何证明二维DFT的信号可分离性?软件

matlab - MATLAB 中的矩阵大小限制

matlab - 从数据获取FFT峰

linux - 安装 Qt 5.2.1 并使 pkg-config 识别它

matlab - 哈里斯检测器结果在 matlab 和 opencv 中的关系

javascript - 从javascript中的所有嵌套数组中找到最大和最小元素

mysql - 获取mysql中与max相关的数据