2011-01-30 21 views
8

necesito escribir un par de flotadores numpy en un archivo csv que tiene contenido de cadena adicional. por lo tanto, no uso savetxt etc. con numpy.set_printoptions() solo puedo definir el comportamiento de impresión, pero no el comportamiento str(). Sé que extraño algo y no puede ser tan difícil, pero no encuentro una respuesta razonable en los interwebs. tal vez alguien pueda señalarme en la dirección correcta. heres un código de ejemplo:Cómo establecer la precisión en str (numpy.float64)?

In [1]: import numpy as np 
In [2]: foo = np.array([1.22334]) 

In [3]: foo 
Out[3]: array([ 1.22334]) 

In [4]: foo[0] 
Out[4]: 1.2233400000000001 

In [5]: str(foo[0]) 
Out[5]: '1.22334' 

In [6]: np.set_printoptions(precision=3) 

In [7]: foo 
Out[7]: array([ 1.223]) 

In [8]: foo[0] 
Out[8]: 1.2233400000000001 

In [9]: str(foo[0]) 
Out[9]: '1.22334' 

¿Cómo convierto np.float a una cadena con un formato agradable, que yo pueda alimentar a file.write()?

saludos cordiales,

fookatchu

Respuesta

8

Usted sólo puede usar el formato de cadenas estándar:

>>> x = 1.2345678 
>>> '%.2f' % x 
'1.23' 
+0

entiendo el punto, gracias. pensé que sería así de fácil ... las otras respuestas también funcionan. ¡gracias a todos! – Fookatchu

6

usted podría utilizar el formateo de cadena normal, ver: http://docs.python.org/library/string.html#formatspec

Ejemplo:

print '{:.2f}'.format(0.1234) # '0.12' 
print '{:.2e}'.format(0.1234) # '1.23e-01' 
+1

el código que publicó no funcionó. ¡pero el enlace es muy útil! la sintaxis correcta sería: '{0: f}'. formato (a [1]). – Fookatchu

3

En lugar de str(foo[0]), utilice "%.3f" % foo[0].

0

También se puede hacer:

precision = 2 
str(np.round(foo[0], precision)) 

tenía algunas ventajas para mí el ('% .2f' % x) cuando es necesario hacer string a str (np.log (0.0)), que está perfectamente tratado como "-inf" por numpy para que no tengas que molestarte aquí.

Cuestiones relacionadas