<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<br>
<br>
On 10/03/10 10:09, Bruce Schultz wrote:
<blockquote
 cite="mid:17a8763f1003091609scb416c3j13fbf986026ca340@mail.gmail.com"
 type="cite">
  <pre wrap="">On Sat, Mar 6, 2010 at 8:35 AM, G&ouml;khan Sever <a class="moz-txt-link-rfc2396E" href="mailto:gokhansever@gmail.com">&lt;gokhansever@gmail.com&gt;</a> wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">
On Fri, Mar 5, 2010 at 8:00 AM, Bruce Schultz <a class="moz-txt-link-rfc2396E" href="mailto:bruce.schultz@gmail.com">&lt;bruce.schultz@gmail.com&gt;</a>
wrote:
    </pre>
    <blockquote type="cite">
      <pre wrap="">Output is:
### ndarray
[[ 1.&nbsp;&nbsp; 2. ]
&nbsp;[ 3.&nbsp;&nbsp; 4.1]]
### structured array
[(1.0, 2.0) (3.0, 4.0999999999999996)]
      </pre>
    </blockquote>
    <pre wrap="">I still couldn't figure out how floating point numbers look nicely on screen
in cases like yours (i.e., trying numpy.array2string()) but you can make
sure by using numpy.savetxt("file", array, fmt="%.1f") you will always have
specified precision in the written file.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Using numpy.array2string() gives the same format as the output above.
  </pre>
</blockquote>
I started looking at how array2string() is implemented, and came up
with this patch which formats my structured array nicely, the same as
an unstructured array. It was mainly done as a proof of concept, so it
only works for floats and I'm probably doing the wrong thing to detect
a structured array by comparing the dtype to void.&nbsp; Maybe someone with
more numpy experience can tell me if I'm on the right track...<br>
<br>
=== modified file 'numpy/core/arrayprint.py'<br>
--- numpy/core/arrayprint.py&nbsp;&nbsp;&nbsp; 2010-02-21 16:16:34 +0000<br>
+++ numpy/core/arrayprint.py&nbsp;&nbsp;&nbsp; 2010-03-10 13:48:22 +0000<br>
@@ -219,6 +219,10 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif issubclass(dtypeobj, _nt.unicode_) or \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; issubclass(dtypeobj, _nt.string_):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format_function = repr<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif issubclass(dtypeobj, _nt.void):<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #XXX this is for structured arrays....<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format_function = StructuredFormatter(a)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; separator = '\n '<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format_function = str<br>
&nbsp;<br>
@@ -231,6 +235,17 @@<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; return lst<br>
&nbsp;<br>
+class StructuredFormatter:<br>
+&nbsp;&nbsp;&nbsp; def __init__(self, a):<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.data = a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.dtype = a.dtype&nbsp; #XXX use the dtype to build column
formatters<br>
+<br>
+&nbsp;&nbsp;&nbsp; def __call__(self, x):<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ff = FloatFormat(self.data.view(float),
_float_output_precision,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _float_output_suppress_small)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return '[' + ' '.join([ff(n) for n in x]) + ']'<br>
+<br>
+&nbsp;&nbsp;&nbsp; <br>
&nbsp;def _convert_arrays(obj):<br>
&nbsp;&nbsp;&nbsp;&nbsp; import numeric as _nc<br>
&nbsp;&nbsp;&nbsp;&nbsp; newtup = []<br>
<br>
<br>
<br>
Cheers<br>
Bruce<br>
<br>
</body>
</html>