我有一个numpy 1d数组,我想找到数组的索引,使其值在另一个1d数组指定的闭合间隔内。具体来说,这是一个例子
A= np.array([ 0.69452994, 3.4132039 , 6.46148658, 17.85754453,
21.33296454, 1.62110662, 8.02040621, 14.05814177,
23.32640469, 21.12391059])
b = np.array([ 0. , 3.5, 9.8, 19.8 , 50.0])
我想在b中找到索引,使得A中的值处于闭合区间内(b始终按从0开始的排序顺序,以A可能采用的最大可能值结束。
在这个具体的例子中,我的输出将是
indx = [0,0,1,2,3,0,1,2,3,3]
我该怎么办?我尝试使用np.where,没有任何成功。
答案 0 :(得分:0)
鉴于b
的排序性质,我们可以简单地使用searchsorted/digitize
来获取可以放置A
元素的索引以保持排序顺序,这实质上意味着获取每个b
元素的边界索引,最后从这些索引中减去1
以获得所需的输出。
因此,假设右侧边界是开放边界,解决方案将是 -
np.searchsorted(b,A)-1
np.digitize(A,b,right=True)-1
对于左侧开放边界,请使用:
np.searchsorted(b,A,'right')-1
np.digitize(A,b,right=False)-1