2012-08-25 55 views
6

我有一個numpy主數組。給定另一個重複元素的搜索值數組,我想在主數組中生成這些搜索值的索引。在numpy數組中查找值列表的索引

例如:主陣列[1,2,3,4,5],搜索數組是[4,2,2,3]

解決方案:[3,1,1,2]

是否有一個「本地」numpy函數,這有效地做到了這一點(意味着在C速度,而不是蟒蛇的速度)?

我知道下面的解決方案,但是,首先,它是一個Python列表理解,第二,它會搜索2次索引。

ma = np.array([1,2,3,4,5]) 
sl = np.array([4,2,2,3]) 
ans = [np.where(ma==i) for i in sl] 

另外,如果我不得不求助於排序和二進制搜索,我會做它作爲最後的手段(雙關語不是各種層次的意)。我有興趣找到我是否缺少numpy庫中基本的東西。這些列表非常大,因此性能非常重要。

謝謝。

編輯: 張貼之前我會試着用令人沮喪的結果如下:

[np.searchsorted(ma,x) for x in sl] 

發表@pierre解決的辦法是更高性能和正是我一直在尋找。

回答

14

請問np.searchsorted是否適合您?

>>> master = np.array([1,2,3,4,5]) 
>>> search = np.array([4,2,2,3]) 
>>> np.searchsorted(master, search) 
array([3, 1, 1, 2]) 
+0

絕對!剛剛完成分析您的代碼,它效果很好。將編輯我的問題發佈結果。 – Fenchurch