numpy formatting python-3.5

numpy.savetxt que da como resultado un error de falta de coincidencia de formato en Python 3.5



formatting python-3.5 (1)

Estoy tratando de guardar una matriz numpy (Nx3, float64) en un archivo txt usando numpy.savetxt:

np.savetxt(f, mat, fmt=''%.5f'', delimiter='' '')

Esta línea funcionó en Python 2.7, pero en Python 3.5, obtengo el siguiente error:

TypeError: no coincidencia entre el tipo de matriz (''float64'') y el especificador de formato (''% .5f% .5f% .5f'')

Cuando estoy ingresando en el código de savetxt, la impresión del error (traceback.format_exc ()) en el bloque catch (numpy.lib.npyio, línea 1158), el error es completamente diferente:

TypeError: el argumento write () debe ser str, no bytes

La línea de código resultante de la excepción es la siguiente:

fh.write(asbytes(format % tuple(row) + newline))

Intenté eliminar los asbytes, y parece solucionar este error. ¿Es un error en numpy?


savetxt abre el archivo en modo wb y, por lo tanto, escribe todo como bytes.

Si en cambio abro el archivo con ''w'', recibo su segundo error:

In [403]: x=np.ones((3,3),dtype=np.float64) In [404]: with open(''test.txt'',''w'') as f: np.savetxt(f,x,fmt=''%.5f'') .....: TypeError: must be str, not bytes

Pero no hay problema con

In [405]: with open(''test.txt'',''wb'') as f: np.savetxt(f,x,fmt=''%.5f'') .....: In [406]: cat test.txt 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000

Esto está en Py3.4; No tengo el numpy instalado con mi 3.5 Python. Pero no esperaría una diferencia.

Hace

''%.5f''%1.2342

¿Trabaja en su sistema? También puedes probar

''%.5f %.5f %.5f''%tuple(mat[0,:])