use*_*178 1 python binary search numpy 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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我尝试通过简单地搜索缩短的数组来合并它,但这仍然删除了一些值
二分搜索可以很容易地适应找到大于键的第一个值,这样通过两次搜索,您就可以找到等于键的值范围。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])
Run Code Online (Sandbox Code Playgroud)
对于非常大的数组,在 上执行第二次搜索可能会稍微更有效a[left:]:
>>> right = left + np.searchsorted(a[left:], 2, side='right')
>>> a[left:right]
array([2, 2, 2])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |