簡體   English   中英

查找間隔索引的有效方法

[英]Efficient way to find index of interval

我正在用Python編寫樣條類。 計算樣條插值的方法需要最接近的x個數據點的索引。 當前,簡化版本如下所示:

def evaluate(x):
    for ii in range(N): # N = len(x_data)
        if x_data[ii] <= x <= x_data[ii+1]:
            return calc(x,ii)

因此,它將遍歷x_data點的列表,直到找到x所在的區間的下標ii ,然后在執行樣條插值的函數calc使用它。 雖然功能正常,但如果x接近數據集的末尾,這對於大型x_data數組似乎效率不高。 是否有一種更有效或更優雅的方法來執行相同的功能,而不需要迭代檢查每個間隔?

注意:可以假定x_data已排序,因此x_data[ii] < x_data[ii+1] ,但不一定相等。

這正是bisect的含義, https: //docs.python.org/2/library/bisect.html

from bisect import bisect
index = bisect(x_data,x)
#I dont think you actually need the value of the 2 closest but if you do here it is
point_less = x_data[index-1]  # note this will break if its index 0 so you probably want a special case for that
point_more = x_data[index]

closest_value = min([point_less,point_more],key=lambda y:abs(x-y))

或者,您應該使用二進制搜索(實際上我很確定那是bisect在幕后使用的)....應該是最壞的情況O(log n) (假設您的輸入數組已經排序)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM