La raison de l'exception est que les and
appels implicitement bool
. D'abord sur l'opérande de gauche et (si l'opérande de gauche l'est True
) puis sur l'opérande de droite. x and y
Est donc équivalent à bool(x) and bool(y)
.
Cependant le bool
sur un numpy.ndarray
(s'il contient plus d'un élément) lèvera l'exception que vous avez vue:
>>> import numpy as np
>>> arr = np.array([1, 2, 3])
>>> bool(arr)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
L' bool()
appel est en implicite and
, mais aussi if
, while
, or
, donc l' un des exemples suivants également échouer:
>>> arr and arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> if arr: pass
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> while arr: pass
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> arr or arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Il y a plus de fonctions et d'instructions en Python qui cachent les bool
appels, par exemple, 2 < x < 10
c'est juste une autre façon d'écrire 2 < x and x < 10
. Et l' and
appellera bool
: bool(2 < x) and bool(x < 10)
.
L' équivalent élément par élément pour and
serait la np.logical_and
fonction, de la même manière que vous pourriez utiliser np.logical_or
comme équivalent pouror
.
Pour les tableaux booléennes - et les comparaisons aiment <
, <=
, ==
, !=
, >=
et >
sur les tableaux NumPy renvoient des tableaux numpy booléennes - vous pouvez également utiliser les bitwise-sage élément fonctions (et opérateurs): np.bitwise_and
( &
opérateur)
>>> np.logical_and(arr > 1, arr < 3)
array([False, True, False], dtype=bool)
>>> np.bitwise_and(arr > 1, arr < 3)
array([False, True, False], dtype=bool)
>>> (arr > 1) & (arr < 3)
array([False, True, False], dtype=bool)
et bitwise_or
( |
opérateur):
>>> np.logical_or(arr <= 1, arr >= 3)
array([ True, False, True], dtype=bool)
>>> np.bitwise_or(arr <= 1, arr >= 3)
array([ True, False, True], dtype=bool)
>>> (arr <= 1) | (arr >= 3)
array([ True, False, True], dtype=bool)
Une liste complète des fonctions logiques et binaires se trouve dans la documentation NumPy: