On Fri, Apr 2, 2010 at 8:31 AM, Robert Kern <robert.k...@gmail.com> wrote: > On Fri, Apr 2, 2010 at 08:28, Ryan May <rma...@gmail.com> wrote: >> On Thu, Apr 1, 2010 at 10:07 PM, Shailendra <shailendra.vi...@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 _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion