Python 查找已排序的浮点数组是否包含特定范围内的数字

Python 查找已排序的浮点数组是否包含特定范围内的数字,python,arrays,numpy,Python,Arrays,Numpy,我有一个已排序的浮点数数组,我想知道这个数组是否包含给定范围内的数字。注意,我对数组中数字的位置不感兴趣。我只想知道是否至少有一个数字在这个范围内 由于我必须在大量的时间间隔上执行相同的操作(在整个操作过程中数组保持不变),因此我关心的是效率 有人能帮我吗?正如评论中所说的,可能会有用,事实上确实如此。如问题中所述,数组保持不变,而我们在迭代中有不同的范围。因此,假设范围存储在(n,2)形状的数组中,第一列表示开始,第二列表示这些范围的停止值 我们将有一个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)

我想你忘了添加你试过的代码了……你自己试过什么吗?可能是一个开始的好地方我认为numpy柱状图是这个任务的一个好选择。它甚至不需要排序的数组,这是我一直在寻找的@安德里亚很高兴能帮上忙!