On 01/31/2012 04:35 PM, Benjamin Root wrote:
On Tue, Jan 31, 2012 at 9:18 AM, Robert Kern
mailto:robert.kern@gmail.com> wrote: On Tue, Jan 31, 2012 at 15:13, Benjamin Root
mailto:ben.root@ou.edu> wrote: > Is np.all() using np.array() or np.asanyarray()? If the latter, I would > expect it to return a numpy array from a generator.
Why would you expect that?
[~/scratch] |37> np.asanyarray(i>5 for i in range(10)) array(
, dtype=object) -- Robert Kern
What possible use-case could there be for a numpy array of generators? Furthermore, from the documentation:
numpy.asanyarray = asanyarray(a, dtype=None, order=None, maskna=None, ownmaskna=False) Convert the input to an ndarray, but pass ndarray subclasses through.
Parameters ---------- a : array_like *Input data, in any form that can be converted to an array*. This includes scalars, lists, lists of tuples, tuples, tuples of tuples, tuples of lists, and ndarrays.
Emphasis mine. A generator is an input that could be converted into an array. (Setting aside the issue of non-terminating generators such as those from cycle()).
Splitting semantic hairs doesn't help here -- it *does* return an array, it just happens to be a completely useless 0-dimensional one. The question is, is the current confusing and less than useful? (I vot for "yes"). list and tuple are special-cased, why not generators (at least to raise an exception) Going OT, look at this gem: ???? In [3]: a Out[3]: array([1, 2, 3], dtype=object) In [4]: a.shape Out[4]: () ??? In [9]: b Out[9]: array([1, 2, 3], dtype=object) In [10]: b.shape Out[10]: (3,) Figuring out the "???" is left as an exercise to the reader :-) Dag Sverre