例如:我有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