[Numpy-discussion] Is this odd?

Ryan May rmay31 at gmail.com
Fri Apr 2 11:20:57 EDT 2010


On Fri, Apr 2, 2010 at 8:31 AM, Robert Kern <robert.kern at gmail.com> wrote:
> On Fri, Apr 2, 2010 at 08:28, Ryan May <rmay31 at gmail.com> wrote:
>> On Thu, Apr 1, 2010 at 10:07 PM, Shailendra <shailendra.vikas at 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.

Wow, that's what I get for trying to read code *before* coffee.  On
the plus side, I now know how nonzero() actually works.

Ryan

-- 
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma



More information about the NumPy-Discussion mailing list