2017-02-08 53 views
0

我有一個大數組,其值爲0到360,增量爲.08。所以我有一個輸入值,我需要通過這個大數組並找到最接近的兩個值:一個更大,另一個更小。例如(簡化):Numpy:找到最接近輸入的數組中的2個數字的索引

array = [0, .08, .16, .24, .32, .40] 

input = .10 (variable) 
output = [1,2] 

因爲0.10是在0.08和0.16的折射率之間將提前的幫助1個2 謝謝!

+4

這是一個簡單的編輯示例還是實際問題? '[int(0.10/0.08),int(0.10/0.08)+1]'會做... – Emilien

+0

是的,這是一個簡化的例子。該陣列長約4500,輸入將是可變的。 – EagleTamer

+0

只要步長恆定,該解決方案即使對於可變輸入也是有效的。 – Emilien

回答

3

如果你的步驟不是恆定的,你可以使用bisect,假設你的數組已被排序。

import bisect 

array = [0, .03, .05, .16, .24, .32, .40] 
input = 0.1 
ind = bisect.bisect_left(array, input) 
print([ind - 1, ind]) 

結果:

[2, 3] 
2

看起來像numpy的具有釘的功能: searchsorted

array = [0, .03, .05, .16, .24, .32, .40] 
input = 0.1 
undx = np.searchsorted(array, input) 

array[undx-1], input, array[undx] 
Out[6]: (0.05, 0.1, 0.16) 
0

它看起來像一個算術問題爲O(1)的解決方案:

a=arange(0,360,0.08) 
input=123.456 

i=int(input/0.08) 

print(a[i:i+2]) 
print([i,i+1]) 
#[ 123.44 123.52] 
#[1543, 1544] 
相關問題