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

Moe*_*een 50 python numpy

x = np.arange(0,2,0.5)
valeur = 2*x

if valeur <= 0.6:
    print ("this works")
else:   
    print ("valeur is too high")
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

if valeur <= 0.6:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

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

pok*_*oke 68

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

>>> valeur <= 0.6
array([ True, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

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

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

>>> np.any(valeur <= 0.6)
True
>>> np.all(valeur <= 0.6)
False
Run Code Online (Sandbox Code Playgroud)


Pra*_*kar 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
Run Code Online (Sandbox Code Playgroud)