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)。