python - Numpy 数组 __contains__ 检查

标签 python numpy

我得到了一个数组数组:

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/

相关文章:

python - 如何在Python中的数据集的两个不同列中找到相同值的匹配

python - 在 JSON 中搜索变量然后返回父标签的名称

python - pip 从requirements.txt 安装文件时出错

python - 无法显示图像 HSI 转换为 RGB python

python - X*Y 项的平均值并保持 numpy 数组的维度

python - 无法在 scipy 中创建非空 csr.matrix()

python - 如何在 Django Web 应用程序中渲染 Matplotlib 绘图?

python - Conda 软件包的完整性是否得到验证?

python - LDAP 条目与多行正则表达式匹配时出现问题

python - 电影推荐中的预测值