2017-08-16 69 views

回答

3

假設輸入作爲排序,我們可以使用np.searchsorted得到其中600可以被放置在該排序的順序索引,然後簡單地使用索引和一次性移索引以獲得經索引的下,上限,像所以 -

idx = np.searchsorted(x,600) 
out = x[idx-1], x[idx] 

採樣運行 -

In [41]: x = [10, 100, 1000, 10000] 

In [42]: idx = np.searchsorted(x,600) 

In [44]: x[idx-1], x[idx] 
Out[44]: (100, 1000) 

我們也可以用bisect module,我相信這可能是一個有點快 -

import bisect 

idx = bisect.bisect_left(x,600) 
+0

好,但我會警告OP檢查邊緣情況,例如當搜索數組的最小值和最大值以外的值,例如'0'或'10001':'idx = np.searchsorted(x,0 ); x [idx-1],x [idx]'給出'(10000,10)'和'idx = np.searchsorted(x,10001); x [idx-1],x [idx]'給出'IndexError:列表索引超出範圍'。 –

+0

@StevenRumbalski好點。 OP需要澄清那些邊緣情況下期望的下限,上限。 – Divakar

+0

謝謝!我永遠不會有數值超出最小值/最大值的情況 – UnlimitedQuestions

相關問題