<div dir="ltr">Hi,<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jan 21, 2014 at 8:34 AM, Dr. Leo <span dir="ltr"><<a href="mailto:fhaxbox66@googlemail.com" target="_blank">fhaxbox66@googlemail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi,<br>
<br>
I would like to write something like:<br>
<br>
In [25]: iterable=((i, i**2) for i in range(10))<br>
<br>
In [26]: a=np.fromiter(iterable, int32)<br>
---------------------------------------------------------------------------<br>
ValueError                                Traceback (most recent call<br>
last)<br>
<ipython-input-26-5bcc2e94dbca> in <module>()<br>
----> 1 a=np.fromiter(iterable, int32)<br>
<br>
ValueError: setting an array element with a sequence.<br>
<br>
<br>
Is there an efficient way to do this?<br></blockquote><div>Perhaps you could just utilize structured arrays (<a href="http://docs.scipy.org/doc/numpy/user/basics.rec.html">http://docs.scipy.org/doc/numpy/user/basics.rec.html</a>), like:</div>
<div><div><font face="courier new, monospace">iterable= ((i, i**2) for i in range(10))</font></div><div><font face="courier new, monospace">a= np.fromiter(iterable, [('a', int32), ('b', int32)], 10)</font></div>
<div><font face="courier new, monospace">a.view(int32).reshape(-1, 2)</font></div><div><font face="courier new, monospace">Out[]: </font></div><div><font face="courier new, monospace">array([[ 0,  0],</font></div><div><font face="courier new, monospace">       [ 1,  1],</font></div>
<div><font face="courier new, monospace">       [ 2,  4],</font></div><div><font face="courier new, monospace">       [ 3,  9],</font></div><div><font face="courier new, monospace">       [ 4, 16],</font></div><div><font face="courier new, monospace">       [ 5, 25],</font></div>
<div><font face="courier new, monospace">       [ 6, 36],</font></div><div><font face="courier new, monospace">       [ 7, 49],</font></div><div><font face="courier new, monospace">       [ 8, 64],</font></div><div><font face="courier new, monospace">       [ 9, 81]])</font></div>
</div><div><br></div><div>My 2 cents,</div><div>-eat </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br>
Creating two 1-dimensional arrays first is costly as one has to<br>
iterate twice over the data. So the only way I see is creating an<br>
empty [10,2] array and filling it row by row. This is memory-efficient<br>
but slow. List comprehension is vice versa.<br>
<br>
If there is no solution, wouldn't it be possible to rewrite fromiter<br>
so as to accept sequences?<br>
<br>
Leo<br>
<br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div><br></div></div>