定义了1d数组(或更大数组的1d切片),如:
a=np.array([ 5, 12, 13])
如果有更高维度的数组,例如:
c1=np.array([[1, 2, 3], [ 5, 12, 13], [7, 8, 9]])
c2=np.array([[1, 2, 3], [ 5, 6, 7], [7, 8, 9]])
原来是:
a in c1, a in c2
(True, True)
我希望只有第一个条件,其中a
被连续包含为子数组True
。虽然a in c2
会给False
。
是否有任何功能可以解决这个问题?
答案 0 :(得分:2)
我想,这就是你想要的:
import numpy as np
a=np.array([ 5, 12, 13])
c1=np.array([[1, 2, 3], [5,12,13], [7, 8, 9]])
c2=np.array([[1, 2, 3], [5,6,7], [7, 8, 9]])
print any((a == x).all() for x in c1)
print any((a == x).all() for x in c2)
输出:
True
False
编辑:正如moarningsun所建议的,这里是一个更好的版本:
import numpy as np
a=np.array([ 5, 12, 13])
c1=np.array([[1, 2, 3], [5,12,13], [7, 8, 9]])
c2=np.array([[1, 2, 3], [5,6,7], [7, 8, 9]])
print np.any((a == c1).all(axis=1))
print np.any((a == c2).all(axis=1))
答案 1 :(得分:2)
您可以使用.tolist()
,然后正常调用这些函数:
>>> a=np.array([ 5, 12, 13])
>>> c1=np.array([[1, 2, 3], [ 5, 12, 13], [7, 8, 9]])
>>> c2=np.array([[1, 2, 3], [ 5, 6, 7], [7, 8, 9]])
>>> a.tolist() in c1.tolist(), a.tolist() in c2.tolist()
(True, False)
>>>