代码之家  ›  专栏  ›  技术社区  ›  Remy

如何在MATLAB中有效地求出阵列所选指标的最大值?

  •  1
  • Remy  · 技术社区  · 7 年前

    假设我们有向量: w ,则, s_on s_off s\u on和s\u off具有事件开始和偏移的升序索引。我们需要在每个事件中找到最大值。我们如何在不使用循环的情况下做到这一点。 例如,我们可能有以下值:

    s_on = [5 19 78 101];
    s_off = [10 28 97 152];
    w = rand(1,200);
    

    以下代码不起作用:

    pv = max(w(s_on(1:end):s_off(1:end)))
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Luis Mendo    7 年前

    将数据定义为

    s_on = [5 19 78 101];
    s_off = [10 28 97 152];
    w = rand(1,200);
    

    每个指数范围的最大值可计算如下:

    [v, t] = max(bsxfun(@ge, 1:numel(w), s_on(:)) & bsxfun(@le, 1:numel(w), s_off(:)), [], 1);
    result = accumarray(t(v).', w(v).', [], @max);
    

    循环更具可读性:

    result_loop = NaN(numel(s_on), 1);
    for k = 1:numel(s_on)
        result_loop(k) = max(w(s_on(k):s_off(k)));
    end
    

    检查两种方法是否给出相同的结果:

    isequal(result, result_loop)