[Numpy-discussion] A question about dtype syntax

Jean-Baptiste Marquette marquett at iap.fr
Wed Aug 31 10:24:10 EDT 2011


Hi Pierre,

> 
> On Aug 31, 2011, at 3:40 PM, Jean-Baptiste Marquette wrote:
>> Traceback (most recent call last):
>>  File "/Users/marquett/workspace/Distort/src/StatsSep.py", line 44, in <module>
>>    np.savetxt(Table, StatsAll, delimiter=' ', fmt=['%15s %.5f %.5f %5d %.4f %.4f'])
>>  File "/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/numpy/lib/npyio.py", line 979, in savetxt
>>    fh.write(asbytes(format % tuple(row) + newline))
>> TypeError: not enough arguments for format string
> 
> Without knowing StatsAll, it ain't easy… From the exception message, we could expect that one of rows is empty or as less than the 6 elements required by your format string.
> If you're using IPython, switch to debugger mode (pdb), then inspect row and format to find out the content of the offending line.

Here is a (short) sample of StatsAll:

[[('bs3000k.cat', 280.60341, -7.09118, 9480, 0.2057, 0.14)]
 [('bs3000l.cat', 280.61389, -7.24097, 11490, 0.1923, 0.0747)]
 [('bs3000m.cat', 280.77074, -7.08237, 13989, 0.2289, 0.1009)]
 [('bs3000n.cat', 280.77228, -7.23563, 15811, 0.1767, 0.1327)]
 [('bs3001k.cat', 280.95383, -7.10004, 7402, 0.2539, 0.0777)]
 [('bs3001l.cat', 280.95495, -7.23409, 13840, 0.1463, 0.1008)]
 [('bs3001m.cat', 281.1172, -7.08094, 9608, 0.2311, 0.1458)]
 [('bs3001n.cat', 281.12447, -7.23398, 14030, 0.2538, 0.1022)]
 [('bs3002k.cat', 280.62533, -7.47818, 593, 0.0291, 0.0237)]
 [('bs3002l.cat', 280.61508, -7.60359, 9122, 0.0518, 0.0205)]
 [('bs3002m.cat', 280.77209, -7.46262, 1510, 0.0415, 0.0302)]
 [('bs3002n.cat', 280.77578, -7.60117, 14177, 0.0807, 0.0327)]
 [('bs3003k.cat', 280.96463, -7.42967, 13506, 0.0305, 0.0225)]
 [('bs3003l.cat', 280.95638, -7.58462, 17903, 0.0458, 0.0298)]
 [('bs3003m.cat', 281.12729, -7.42516, 15676, 0.0879, 0.0446)]
 [('bs3003n.cat', 281.1354, -7.58497, 16015, 0.0685, 0.0376)]
 [('bs3004k.cat', 280.61148, -7.78976, 14794, 0.079, 0.0473)]
 [('bs3004l.cat', 280.61791, -7.94186, 15455, 0.0818, 0.0727)]
 [('bs3004m.cat', 280.78388, -7.78834, 14986, 0.0966, 0.0313)]
 [('bs3004n.cat', 280.78261, -7.93932, 18713, 0.0925, 0.0472)]
 [('bs3005k.cat', 280.9659, -7.78816, 14906, 0.0456, 0.022)]
 [('bs3005l.cat', 280.96811, -7.93894, 19744, 0.021, 0.0218)]
 [('bs3005m.cat', 281.1344, -7.78035, 15943, 0.0687, 0.0203)]
 [('bs3005n.cat', 281.13915, -7.93027, 18183, 0.1173, 0.0695)]
 [('bs3006k.cat', 280.61294, -8.14201, 13309, 0.143, 0.065)]
 [('bs3006l.cat', 280.65109, -8.29416, 405, 0.258, 0.1147)]
 [('bs3006m.cat', 280.78767, -8.13916, 14527, 0.1106, 0.0568)]
 [('bs3006n.cat', 280.80935, -8.28823, 818, 0.2382, 0.0764)]
 [('bs3007k.cat', 280.96614, -8.1401, 13251, 0.0946, 0.0415)]
 [('bs3007l.cat', 280.97158, -8.23797, 5807, 0.1758, 0.0636)]
 [('bs3007m.cat', 281.14129, -8.13799, 13886, 0.1524, 0.0517)]
 [('bs3007n.cat', 281.15309, -8.2476, 214, 0.1584, 0.0648)]]

> 
>> I struggled with various unsuccessful fmt syntaxes, and the numpy doc is very discrete about that topic:
>> 
>> fmt : string or sequence of strings
>> 
>>    A single format (%10.5f), a sequence of formats
> 
> Looks clear enough to me… But yes, a comment in the code shows that "   `fmt` can be a string with multiple insertion points or a list of formats.  E.g. '%10.5f\t%10d' or ('%10.5f', '$10d')" (so we should probably update the doc to this regard)

The command with parentheses:

        np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s %.5f %.5f %5d %.4f %.4f'))

fails as well, but with a different error:

Traceback (most recent call last):
  File "/Users/marquett/workspace/Distort/src/StatsSep.py", line 44, in <module>
    np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s %.5f %.5f %5d %.4f %.4f'))
  File "/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/numpy/lib/npyio.py", line 974, in savetxt
    % fmt)
AttributeError: fmt has wrong number of % formats.  %15s %.5f %.5f %5d %.4f %.4f

Plus, this one:

        np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s', '%.5f', '%.5f', '%5d', '%.4f', '%.4f'))

yields:

Traceback (most recent call last):
  File "/Users/marquett/workspace/Distort/src/StatsSep.py", line 44, in <module>
    np.savetxt(Table, StatsAll, delimiter=' ', fmt=('%15s', '%.5f', '%.5f', '%5d', '%.4f', '%.4f'))
  File "/Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/numpy/lib/npyio.py", line 966, in savetxt
    raise AttributeError('fmt has wrong shape.  %s' % str(fmt))
AttributeError: fmt has wrong shape.  ('%15s', '%.5f', '%.5f', '%5d', '%.4f', '%.4f')

Quite puzzling...
Should I switch to the I/O of asciitable package ?
Anyway, thanks again for your help.
JB

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110831/c657600e/attachment.html>


More information about the NumPy-Discussion mailing list