使用a.any()或a.all()

时间:2015-12-26 15:46:56

标签: python numpy

presentError()

这是我得到的错误:

presentError(... lots of args ...)

我已经阅读了几篇关于a.any()或a.all()的帖子,但仍无法找到真正清楚解释如何解决问题的方法。我明白为什么Python不喜欢我写的东西,但我不知道如何解决它。

4 个答案:

答案 0 :(得分:64)

如果您查看valeur <= 0.6的结果,可以看到造成这种歧义的原因:

>>> valeur <= 0.6
array([ True, False, False, False], dtype=bool)

所以结果是另一个数组,在这种情况下有4个布尔值。那么结果应该是什么?如果一个值为真,条件是否为真?只有当所有值都为真时,条件才真实吗?

这正是numpy.anynumpy.all所做的。前者需要至少一个真值,后者要求所有值都为真:

>>> np.any(valeur <= 0.6)
True
>>> np.all(valeur <= 0.6)
False

答案 1 :(得分:5)

还有一种方法可以得到这个

import numpy as np

a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
c = np.array([1,2,3,4])

print((a == b ).all())  #False
print((a == c ).all())   # True
print((a == b ).any())   #False
print((a == c ).any())   #True
print((a > 3 ).all())    #False

答案 2 :(得分:3)

你发表评论:

  

valeur是一个等于[0. 1. 2. 3.]的向量。我对每个单词都感兴趣。对于低于0.6的部分,然后返回“this works”....

如果您对每个术语感兴趣,请编写代码以便处理每个术语。例如。

for b in valeur<=0.6:
    if b:
        print ("this works")
    else:   
        print ("valeur is too high")

这将写2行。

当您尝试使用需要单个标量值的上下文时,numpy代码会产生错误。 if b:...只能做一件事。它本身不会遍历b为每个元素做不同事情的元素。

您也可以将该迭代转换为列表推导,例如

['yes' if b else 'no' for b in np.array([True, False, True])]

答案 3 :(得分:0)

这也应该起作用,并且是对问题的更接近的答案:

for i in range(len(x)):
    if valeur.item(i) <= 0.6:
        print ("this works")
    else:   
        print ("valeur is too high")