2013-03-04 108 views
4

ab是兩個Numpy整數數組。他們排序,沒有重複。 ba的子集。我需要找到b的每個元素的a索引。是否有一個有效的Numpy函數可以幫助,所以我可以避免python循環?在Numpy數組中找到多個值

(實際上,陣列的pandas.DatetimeIndex和numpy的datetime64,但我想這不會改變答案。)

回答

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

從我理解,它不需要b進行排序,並在a上使用二進制搜索。這意味着它是O(n logn)而不是O(n)。如果這還不夠好,總會有Cython。 :-)

+1

非常好。從我+1。 – mgilson 2013-03-04 15:38:39

+0

我甚至不會認爲他們需要在這裏進行二分搜索......在假設兩者都已排序的情況下,您可以輕易地說服自己,這可以在O(N)時間完成。 (考慮合併排序的合併階段)。我很有興趣看看在這些假設下,python實現是否能夠勝過這個。 – mgilson 2013-03-04 15:46:38

+0

@mgilson:你很對,OP的問題可以在O(n)中解決。我所說的是'searchsorted()'解決了一個更普遍的問題,因此不能是O(n)。 – NPE 2013-03-04 15:47:43