# [Numpy-discussion] Is this odd?

Robert Kern robert.kern@gmail....
Fri Apr 2 09:11:45 CDT 2010

```On Thu, Apr 1, 2010 at 22:07, Shailendra <shailendra.vikas@gmail.com> wrote:
> Hi All,
> Below is some array behaviour which i think is odd
>>>> a=arange(10)
>>>> a
> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>> b=nonzero(a<0)
>>>> b
> (array([], dtype=int32),)
>>>> if not b[0]:
> ...     print 'b[0] is false'
> ...
> b[0] is false
>
> Above case the b[0] is empty so it is fine it is considered false
>
>>>> b=nonzero(a<1)
>>>> b
> (array([0]),)
>>>> if not b[0]:
> ...     print 'b[0] is false'
> ...
> b[0] is false
>
> Above case b[0] is a non-empty array. Why should this be consider false.
>
>>>> b=nonzero(a>8)
>>>> b
> (array([9]),)
>>>> if not b[0]:
> ...     print 'b[0] is false'
> ...
>>>>
> Above case b[0] is non-empty and should be consider true.Which it does.
>
> I don't understand why non-empty array should not be considered true
> irrespective to what value they have.

We raise an exception for most arrays. We used to evaluate bool(arr)
as True if any element in arr were nonzero. However, people routinely
got confused and thought that the behavior was that it would return
False if any element were zero. It's ambiguous, so we raise an
exception to prevent errors and misconceptions. Empty arrays are very
rare, so we decided that evaluating bool(arr) as True if there were
any elements had very little use case and would still have the
potential to confuse people. As shown below, there is a better, more
explicit way to test for emptiness.

However, we do allow single-element arrays to evaluate to True or
False based on its single element because that is unambiguous. This is
possibly a mistake, but it tends not to cause too many problems. I
don't know why we also allow bool(array([])) to evaluate to False,
too; we probably shouldn't.

> Also, please suggest the best way to differentiate between an empty
> array and non-empty array( irrespective to what is inside array).

a.size > 0

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
```