例如:我有a = np.array([123, 412, 444])
和b = np.array([123, 321])
Numpy:如何檢查數組是否包含某些數字?
我想知道,如果a
包含在b
所有的元素。這是否有一個簡單的操作?在這種情況下,這不會是真的。
例如:我有a = np.array([123, 412, 444])
和b = np.array([123, 321])
Numpy:如何檢查數組是否包含某些數字?
我想知道,如果a
包含在b
所有的元素。這是否有一個簡單的操作?在這種情況下,這不會是真的。
您可以使用設置差異來確定您要查找的內容。 NumPy的有一個內置的函數調用numpy.setdiff1d(ar1, ar2):
Return the sorted, unique values in ar1 that are not in ar2.
例如,對於你的情況:
>>> a = np.array([123, 412, 444])
>>> b = np.array([123, 321])
>>> diff = np.setdiff1d(b, a)
>>> print diff
array([321])
>>> if diff.size:
>>> print "Not passed"
所以對於你的情況,你會做設定的差,你會從B減去並獲得一個數組元素在b中不在a中。然後你可以檢查是否是空的。如您所見,輸出爲312
,這是a
中的一個條目,但不在b
中;它的長度現在大於零,因此b
中的元素不存在於a
中。
這意味着你要檢查,如果B的每個元素都包含在。 in1d
做的是:
from numpy import array, in1d
a = array([123, 412, 444])
b = array([123, 321])
print in1d(b, a).all()
你可以送花兒給人使用一組:
>>> a = numpy.array([123, 412, 444])
>>> b = numpy.array([123, 321])
>>> set(b) in set(a)
False
或用numpy的較新版本:
>>> numpy.in1d(b,a)
array([ True, False], dtype=bool)
如果你只想要的 '答案',而不是陣列:
>>> numpy.in1d(b,a).all()
False
或(最不理想的):
>>> numpy.array([x in a for x in b])
array([ True, False], dtype=bool)
循環是numpy的陣列slowish,應該避免。
你的意思是獨特的元素? a = [3,3,4],b = [3,4,5],都包含在b中的元素? – Akavall
不,我的意思是b中的所有元素都必須在a中。下面的答案在哪裏,我正在尋找。謝謝 – luffe