surprising result all (generator) (bug??)

Mark Dickinson mdickinson at enthought.com
Tue Jan 31 09:25:33 EST 2012


On Jan 31, 7:24 am, Neal Becker <ndbeck... at gmail.com> wrote:
> In [31]: all is numpy.all
> Out[31]: True
>
> Excellent detective work, Mark!  But it still is unexpected, at least to me.

Agreed that it's a bit surprising.  It's a consequence of NumPy's
general mechanisms for converting arbitrary inputs to arrays:

>>> from numpy import asarray
>>> asarray([i > 0 for i in range(10)])
array([False,  True,  True,  True,  True,  True,  True,  True,  True,
True], dtype=bool)
>>> asarray(i > 0 for i in range(10))
array(<generator object <genexpr> at 0x4688aa8>, dtype=object)

So in the second case you get a 0-dimensional array of type 'object',
whose only element is that generator object;  not surprisingly, the
generator object is considered true.

As to why it's this way:  best to ask on the NumPy mailing lists.
It's probably something that's quite difficult to change without
breaking lots of code, though.

--
Mark



More information about the Python-list mailing list