ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
numpy, python
Solution
If `a` and `b` are Boolean NumPy arrays, the `&` operation returns the elementwise-and of them:
a & b
That returns a Boolean array. To reduce this to a single Boolean value, use either
(a & b).any()
or
(a & b).all()
Note: if `a` and `b` are non-Boolean arrays, consider `(a - b).any()` or `(a - b).all()` instead.
Rationale
The NumPy developers felt there was no one commonly understood way to evaluate an array in Boolean context: it could mean `True` if any element is `True`, or it could mean `True` if all elements are `True`, or `True` if the array has non-zero length, just to name three possibilities.
Since different users might have different needs and different assumptions, the NumPy developers refused to guess and instead decided to raise a `ValueError` whenever one tries to evaluate an array in Boolean context. Applying `and` to two numpy arrays causes the two arrays to be evaluated in Boolean context (by calling `__bool__` in Python3 or `__nonzero__` in Python2).
Problem
Let `x` be a NumPy array. The following: ``` (x > 1) and (x < 3) ``` Gives the error message: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() How do I fix this?
Related problems
- How do "and" and "or" act with non-boolean values?
- Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
- What is Truthy and Falsy? How is it different from True and False?
- How do Python's any and all functions work?
- How do you get the logical xor of two variables in Python?
- converting scipy.sparse.csr.csr_matrix to a list of lists
- If condition with a dataframe