<div dir="ltr">Nathaniel,<div><br></div><div>> <span style="font-size:13px">IMO this is better than making </span><span style="font-size:13px">np.array(iter) internally call list(iter) or equivalent</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">Yeah but that's not the only option:</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">from itertools import chain</span></div><div><span style="font-size:13px">def fromiter_awesome_edition(iterable):</span></div><div><span style="font-size:13px">    elem = next(iterable)</span></div><div><span style="font-size:13px">    dtype = whatever_numpy_does_to_infer_dtypes_from_lists(elem)</span></div><div><span style="font-size:13px">    return np.fromiter(chain([elem], iterable), dtype=dtype)</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">I think this would be a huge win for usability. Always getting tripped up by the dtype requirement. I can submit a PR if people like this pattern.</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">btw, I think np.array(['f', 'o', 'o']) would be exactly the expected result for np.array('foo'), but I guess that's just me.</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">Juan.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Dec 12, 2015 at 10:12 AM, Nathaniel Smith <span dir="ltr"><<a href="mailto:njs@pobox.com" target="_blank">njs@pobox.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Constructing an array from an iterator is fundamentally different from<br>
constructing an array from an in-memory data structure like a list,<br>
because in the iterator case it's necessary to either use a<br>
single-pass algorithm or else create extra temporary buffers that<br>
cause much higher memory overhead. (Which is undesirable given that<br>
iterators are mostly used exactly in the case where one wants to<br>
reduce memory overhead.)<br>
<br>
np.fromiter requires the dtype= argument because this is necessary if<br>
you want to construct the array in a single pass.<br>
<br>
np.array(list(iter)) can avoid the dtype argument, because it creates<br>
that large memory buffer. IMO this is better than making<br>
np.array(iter) internally call list(iter) or equivalent, because the<br>
workaround (adding an explicit call to list()) is trivial, while also<br>
making it obvious to the user what the actual cost of their request<br>
is. (Explicit is better than implicit.)<br>
<br>
In addition, the proposed API has a number of infelicities:<br>
- We're generally trying to *reduce* the magic in functions like<br>
np.array (e.g. the discussions of having less magic for lists with<br>
mismatched numbers of elements, or non-list sequences)<br>
- There's a strong convention in Python is when making a function like<br>
np.array generic, it should accept any iter*able* rather any<br>
iter*ator*. But it would be super confusing if np.array({1: 2})<br>
returned array([1]), or if array("foo") returned array(["f", "o",<br>
"o"]), so we don't actually want to handle all iterables the same.<br>
It's somewhat dubious even for iterators (e.g. someone might want to<br>
create an object array containing an iterator...)...<br>
<br>
hope that helps,<br>
-n<br>
<div class="HOEnZb"><div class="h5"><br>
On Fri, Dec 11, 2015 at 2:27 PM, Stephan Sahm <<a href="mailto:Stephan.Sahm@gmx.de">Stephan.Sahm@gmx.de</a>> wrote:<br>
> numpy.fromiter is neither numpy.array nor does it work similar to<br>
> numpy.array(list(...)) as the dtype argument is necessary<br>
><br>
> is there a reason, why np.array(...) should not work on iterators? I have<br>
> the feeling that such requests get (repeatedly) dismissed, but until yet I<br>
> haven't found a compelling argument for leaving this Feature missing (to<br>
> remember, it is already implemented in a branch)<br>
><br>
> Please let me know if you know about an argument,<br>
> best,<br>
> Stephan<br>
><br>
> On 27 November 2015 at 14:18, Alan G Isaac <<a href="mailto:alan.isaac@gmail.com">alan.isaac@gmail.com</a>> wrote:<br>
>><br>
>> On 11/27/2015 5:37 AM, Stephan Sahm wrote:<br>
>>><br>
>>> I like to request a generator/iterator support for np.array(...) as far<br>
>>> as list(...) supports it.<br>
>><br>
>><br>
>><br>
>> <a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromiter.html" rel="noreferrer" target="_blank">http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromiter.html</a><br>
>><br>
>> hth,<br>
>> Alan Isaac<br>
>> _______________________________________________<br>
>> NumPy-Discussion mailing list<br>
>> <a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
>> <a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
><br>
><br>
><br>
> _______________________________________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
> <a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
><br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Nathaniel J. Smith -- <a href="http://vorpus.org" rel="noreferrer" target="_blank">http://vorpus.org</a><br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</div></div></blockquote></div><br></div>