这取决于您执行此操作的频率,以及您的向量有多大。但我建议对数组进行预处理B
。例如,考虑测试用例:
B = rand(1,10)
B =
0.82346 0.69483 0.3171 0.95022 0.034446 0.43874 0.38156 0.76552 0.7952 0.18687
我们需要建立一个累积的最小和最大向量。如果B
相当长,有几种方法可以做到这一点。
Bmin = B;
N = inf;
while numel(Bmin) < N
N = numel(Bmin);
k = find(diff(Bmin) >= 0);
Bmin(k+1) = [];
end
Bmax = B;
N = inf;
while numel(Bmax) < N
N = numel(Bmax);
k = find(diff(Bmax) <= 0);
Bmax(k+1) = [];
end
然后
Bmin
Bmin =
0.82346 0.69483 0.3171 0.034446
Bmax
Bmax =
0.82346 0.95022
(我也可以构建Bmin
和Bmax
使用一个简单的 for 循环,它可能会更快,但 while 循环写起来更有趣。)
现在很简单。为了找到B
大于任何给定值的第一个元素,请使用histc
on Bmax
。而且由于histc
是矢量化的,所以运算速度很快。为此,请查看 的第二个返回参数histc
。或者,您可以编写矢量化二进制搜索方案。histc
还将通过翻转 中元素的顺序来解决最小元素问题Bmin
。
如果您的目标是找到元素的 INDEX,这也很简单,只需在构建Bmin
和Bmax
.