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,:])