在Numpy数组中查找多个值

Yar*_*riv 4 python numpy pandas

a并且b是两个Numpy整数数组.它们是有序的,没有重复.b是一个子集a.我需要找到a每个元素的索引b.是否有一个有效的Numpy函数可以帮助,所以我可以避免python循环?

(实际上,数组是pandas.DatetimeIndex和Numpy一样datetime64,但我想它并没有改变答案.)

NPE*_*NPE 12

numpy.searchsorted() 可以用来做到这一点:

In [15]: a = np.array([1, 2, 3, 5, 10, 20, 25])

In [16]: b = np.array([1, 5, 20, 25])

In [17]: a.searchsorted(b)
Out[17]: array([0, 3, 5, 6])
Run Code Online (Sandbox Code Playgroud)

据我所知,它不需要b排序,并使用二进制搜索a.这意味着它是O(n logn)而不是O(n).

如果这还不够好,总会有Cython.:-)

  • 是的,我刚刚意识到这一点.太糟糕了,他们没有搜索功能:) (2认同)