這取決於你會做這個多久了,怎麼大的載體。但我會建議預處理數組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
(我可以用一個簡單的for循環也已建立Bmin
和Bmax
,它可能會一直較快,但while循環是寫更多的樂趣。)
現在很簡單。爲了找到大於任何給定值的B
的第一個元素,請在Bmax
上使用histc
。而且由於histc
是矢量化的,所以操作很快。要做到這一點,看看histc
的第二個返回參數。或者,你可以寫一個向量化的二進制搜索方案。 histc
也將通過翻轉Bmin
中元素的順序來解決最小元素問題。
如果您的目標是找到元素的INDEX,那麼通過在構建Bmin
和Bmax
時保留該信息,這一點也非常簡單。
即使它們的尺寸相同,找到仍然不合適。 – 2012-05-11 15:08:35