我有一個大數組,其值爲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 謝謝!
我有一個大數組,其值爲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 謝謝!
如果你的步驟不是恆定的,你可以使用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]
看起來像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)
它看起來像一個算術問題爲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]
這是一個簡單的編輯示例還是實際問題? '[int(0.10/0.08),int(0.10/0.08)+1]'會做... – Emilien
是的,這是一個簡化的例子。該陣列長約4500,輸入將是可變的。 – EagleTamer
只要步長恆定,該解決方案即使對於可變輸入也是有效的。 – Emilien