2010-11-30 94 views
3

在純,unvectorised,Python中我可以使用,相當於 '在' 比較兩個numpy的陣列

>>> a = 9 
>>> b = [5, 7, 12] 
>>> a in b 
False 

我願做陣列類似的東西在與NumPy即

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = np.array([5, 7, 12]) 
>>> a in b 
np.array([False, False, False, False, True, False, True, False, False, False])

。 ..雖然這不起作用。

是否有實現此功能或方法?如果不是最簡單的方法是什麼?

回答

8

您正在尋找in1d

>>> import numpy as np 
>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = np.array([5, 7, 12]) 
>>> np.in1d(a, b) 
array([False, False, False, False, True, False, True, False, False, False], dtype=bool) 
1

你正在比較兩個截然不同的東西。用純Python列表,你有一個int和一個列表。隨着numpy,你有兩個numpy數組。如果你改變一個int,那麼它在numpy中按預期工作。

>>> a = 9 
>>> b = np.array([5, 7, 12]) 
>>> a in b 
False 

另外請注意,你顯示兩個列表是一個非常直觀的結果。返回的數組向您顯示數組a中的每個值是否在b? 5和7是,其他則不是。因此給出的結果。

+0

是,這兩個名單的情況是直觀的,然而,這是_not_ numpy的行爲方式(雖然我也喜歡!) - 我已經編輯質疑到使這個更清楚... – Brendan 2010-11-30 14:25:36

0

如果要測試一個序列是否包含另一個序列,則可能需要實施某種字符串搜索算法。 Reference from Wikipedia