我们说我们有矢量:w
,s_on
和s_off
。 s_on和s_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)))
答案 0 :(得分:1)
将数据定义为
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)