Issue
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?
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).
Answered By - unutbu
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.