J'essaie de sauvegarder une matrice numpy (Nx3, float64) dans un fichier txt à l'aide de numpy.savetxt:
np.savetxt(f, mat, fmt='%.5f', delimiter=' ')
Cette ligne a fonctionné dans python 2.7, mais dans python 3.5, je reçois l'erreur suivante:
TypeError: décalage entre le type de tableau et le spécificateur de format ('% .5f% .5f% .5f')
Lorsque j'entre dans le code de savetxt, l'impression de l'erreur (traceback.format_exc ()) dans le bloc catch (numpy.lib.npyio, ligne 1158), l'erreur est complètement différente:
TypeError: L'argument write () doit être str, pas d'octets
La ligne de code résultant de l'exception est la suivante:
fh.write(asbytes(format % Tuple(row) + newline))
J'ai essayé de supprimer les asbytes, et il semble corriger cette erreur. Est-ce un bug dans numpy?
savetxt
ouvre le fichier en mode wb
et écrit ainsi tout sous forme d'octets.
Si à la place j'ouvre le fichier avec 'w', j'obtiens votre deuxième erreur:
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
Mais il n'y a pas de problème avec
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
Ceci est sur Py3.4; Je n'ai pas installé numpy
avec mon 3.5 Python. Mais je ne m'attendrais pas à une différence.
Est-ce que
'%.5f'%1.2342
travailler sur votre système? Tu pourrais aussi essayer
'%.5f %.5f %.5f'%Tuple(mat[0,:])