指数使得元素处于封闭区间中

时间:2017-11-20 09:27:06

标签: python-2.7 numpy intervals matrix-indexing

我有一个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,没有任何成功。

1 个答案:

答案 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