查找已排序的浮点数组是否包含某个范围内的数字

时间:2016-10-26 11:29:22

标签: python arrays numpy

我有一个有序的numpy浮点数组,我想知道这个数组是否包含给定范围内的数字。请注意,我对数组中数字的位置不感兴趣。我只想知道是否至少有一个数字落在该范围内。

由于我必须在大量间隔内进行相同的操作(在整个操作过程中阵列保持不变),我关注效率。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

正如评论中所谈到的,np.searchsorted可能是有用的,事实确实如此。如问题中所述,数组保持不变,而我们在迭代中具有不同的范围。因此,我们假设范围存储在(n,2)形状的数组中,这样第一列代表开始,而第二列是这些范围的停止值。

我们会有np.searchsorted的解决方案,就像这样 -

np.searchsorted(a,ranges[:,0]) != np.searchsorted(a,ranges[:,1])

这个想法是,如果某个范围内有任何数字,那么使用第一列找到的排序索引(起始值)将小于,因此不等于第二列中的索引(停止值) )。

示例运行 -

In [75]: a   # Input data array
Out[75]: 
array([ 13.,  20.,  22.,  24.,  36.,  50.,  52.,  60.,  64.,  65.,  65.,
        66.,  72.,  76.,  81.,  84.,  88.,  88.,  90.,  97.])

In [76]: ranges # Array of ranges
Out[76]: 
array([[ 19.,  26.],
       [ 22.,  33.],
       [ 25.,  35.],
       [ 38.,  62.]])

In [77]: np.searchsorted(a,ranges[:,0]) != np.searchsorted(a,ranges[:,1])
Out[77]: array([ True,  True, False,  True], dtype=bool)