<br><br><div class="gmail_quote">On Tue, Nov 3, 2009 at 11:43 AM, David Warde-Farley <span dir="ltr"><<a href="mailto:dwf@cs.toronto.edu">dwf@cs.toronto.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On 2-Nov-09, at 11:35 PM, Thomas Robitaille wrote:<br>
<br>
> But if I want to specify the data types:<br>
><br>
> np.rec.fromrecords([(1,'hello'),(2,'world')],dtype=[('a',np.int8),<br>
> ('b',np.str)])<br>
><br>
> the string field is set to a length of zero:<br>
><br>
> rec.array([(1, ''), (2, '')], dtype=[('a', '|i1'), ('b', '|S0')])<br>
><br>
> I need to specify datatypes for all numerical types since I care about<br>
> int8/16/32, etc, but I would like to benefit from the auto string<br>
> length detection that works if I don't specify datatypes. I tried<br>
> replacing np.str by None but no luck. I know I can specify '|S5' for<br>
> example, but I don't know in advance what the string length should be<br>
> set to.<br>
<br>
</div>This is a limitation of the way the dtype code works, and AFAIK<br>
there's no easy fix. In some code I wrote recently I had to loop<br>
through the entire list of records i.e. max(len(foo[2]) for foo in<br>
records).<br>
<br></blockquote><div> <br>Not to shamelessly plug my own project ... but more robust string type detection is one of the features  of Tabular (<a href="http://bitbucket.org/elaine/tabular/">http://bitbucket.org/elaine/tabular/</a>), and is one of the (kinds of) reasons we wrote the package.  Perhaps using Tabular could be useful to you?    <br>
<br>Dan<br></div></div>