[Numpy-discussion] Is this odd?

Robert Kern robert.kern@gmail....
Fri Apr 2 09:31:59 CDT 2010


On Fri, Apr 2, 2010 at 08:28, Ryan May <rmay31@gmail.com> wrote:
> On Thu, Apr 1, 2010 at 10:07 PM, 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.
>> Also, please suggest the best way to differentiate between an empty
>> array and non-empty array( irrespective to what is inside array).
>
> But by using:
>
> if not b[0]:
>
> You're not considering the array as a whole, you're looking at the
> first element, which is giving expected results.

No, b is a tuple containing the array. b[0] is the array itself.

-- 
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


More information about the NumPy-Discussion mailing list