Python 查找一个数组大于第二个数组中的元素的索引

Python 查找一个数组大于第二个数组中的元素的索引,python,numpy,Python,Numpy,我有两个数组 a = np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) b = np.array([0,5,10,15]) 我想要一个长度为b的输出数组,其中每个元素b[I]是a的第一个元素的索引,该元素至少是b[I]: out = np.array([0, 5, 10, 15] 缓慢的解决方案是: out = [] for x in b: i = np.argmax( a >= x ) out.append(

我有两个数组

a = np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
b = np.array([0,5,10,15])
我想要一个长度为
b
的输出数组,其中每个元素
b[I]
a
的第一个元素的索引,该元素至少是
b[I]

out = np.array([0, 5, 10, 15]
缓慢的解决方案是:

out = []
for x in b: 
    i = np.argmax( a >= x )
    out.append( i )
这是一个边际速度增加:

out = []
i=0
for x in b: 
    i = np.argmax( a[i:] >= x ) + i
    out.append( i )

有没有关于纯numpy解决方案的想法?这是令人望而却步的缓慢。谢谢

如果
a
已排序,您可以使用
a.searchsorted(b)

谢谢@Bi-Rico!效果很好。
3e6
元素的速度差异惊人除了“纯numpy”之外,
searchsorted
还使用二进制搜索,因此它可以更好地扩展
a
的大小。它是O(log(N))而不是O(N)。