我有一个有序的numpy浮点数组,我想知道这个数组是否包含给定范围内的数字。请注意,我对数组中数字的位置不感兴趣。我只想知道是否至少有一个数字落在该范围内。
由于我必须在大量间隔内进行相同的操作(在整个操作过程中阵列保持不变),我关注效率。
任何人都可以帮助我吗?
答案 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)