python - 二进制搜索多个值

标签 python search numpy binary binary-search-tree

你好,我有一个 python 相关的问题,

我有一个排序的 Numpy 数组,我必须快速找到某些值的索引,到目前为止我一直在使用二进制搜索,但我遇到的问题是有许多相同值的条目,我必须找到所有值的索引。有没有办法修改二分查找查找所有?
当前代码是

def binarySearch(alist,item,con_array,element):
    if len(alist) == 0:
        return False
    else:
        midpoint = len(alist)//2
        if alist[midpoint]==item:            
            for l in range(len(alist)):
                if alist[l] == item:
                    n_array.append(con_array[l])
            return True                   
        else:
            if item<alist[midpoint]:
                return binarySearch(alist[:midpoint],item,con_array[:midpoint],i)
            else:
                return binarySearch(alist[midpoint+1:],item,con_array[midpoint+1:],i) 

如您所见,我试图通过简单地搜索缩短的数组来合并它,但这仍然会删除一些值

最佳答案

二分搜索可以很容易地调整为找到第一个大于键的值,因此通过两次搜索,您可以找到等于键的值范围。 NumPy 实际上已经为您实现了:

>>> a = np.array([0, 1, 2, 2, 2, 3, 5, 7])
>>> left = np.searchsorted(a, 2, side='left')
>>> right = np.searchsorted(a, 2, side='right')
>>> a[left:right]
array([2, 2, 2])

对于非常大的数组,在 a[left:] 上执行第二次搜索可能稍微更有效:

>>> right = left + np.searchsorted(a[left:], 2, side='right')
>>> a[left:right]
array([2, 2, 2])

关于python - 二进制搜索多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21579927/

相关文章:

python - 从 BeautifulSoup 结果集中分离元素

python - 我想加载到字典中的逗号分隔文件

linux - 在 vi 编辑器中找到匹配模式后显示前 5 行

c++ - `3n` 不同的元素并找到两个值,`x < y`?

python - Pandas 选择具有 bool 日期条件的列

python - Pyspark 使用另一列中的值替换 Spark 数据帧列中的字符串

C 数据库程序找不到第一个输入。为什么?

python - 在 numpy 数组中生成填充的多边形

arrays - 将多个 numpy 数组连接到一个数组中?

python - 使用 Scipy 拟合 Weibull 分布