我得到了一个数组数组:
temp = np.empty(5, dtype=np.ndarray)
temp[0] = np.array([0,1])
我想检查是否 np.array([0,1]) in temp
,在上面的示例中显然是,但代码返回 false。我也尝试过temp.__contains__(np.array([0,1]))
但也返回 false。为什么是这样?它不应该返回 true 吗?
编辑:
所以__contain__
不会工作。还有其他方法检查吗?
最佳答案
一般来说,在 python 中,您需要理解的一件事是,从语义上讲,__contains__
基于__eq__
,即它查找满足 ==
的元素谓词。 (当然,人们可以重写 __contains__
运算符来执行其他操作,但这是另一回事了)。
现在,使用 numpy 数组,__eq__
不返回bool
根本不。每个使用 numpy 的人都在某个时候遇到过这个错误:
if temp == temp2:
print 'ok'
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
这意味着,考虑到 __contains__
的语义冲突和ndarray.__eq__
,这个操作没有达到您想要的效果也就不足为奇了。
根据您发布的代码,设置 temp
没有明显的优势成为np.array
超过list
。无论哪种情况,您都可以“模拟” __contains__
的行为像这样的东西:
temp2 = np.array([0,1])
any( (a == temp2).all() for a in temp if a is not None )
如果你解释一下为什么选择使用异构 np.array
首先,我可能会想出一个更详细的解决方案。
当然,如果没有 @user2357112 到 this question 的链接,这个答案就不完整。 .
关于python - Numpy 数组 __contains__ 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341911/