Supposons que j'obtienne une matrice numpy à partir d'un calcul. Voici ma matrice numpy 'result1' ::
result1=
[[ 1. 0. 0. 0.00375 -0.01072 -0. -1000. ]
[ 2. 3. 4. 0. -0.004 750. 0. ]
[ 3. 3. 0. 0. 0. -750. 1000. ]]
Maintenant, je veux écrire cette matrice dans un fichier texte nommé 'result.txt'. Pour cela, j'ai écrit le code suivant:
np.savetxt('result.txt', result1, fmt='%.2e')
Mais cela me donne tous les éléments de la matrice sur une seule ligne.
1.00e+00 0.00e+00 0.00e+00 3.75e-03 -1.07e-02 -1.14e-13 -1.00e+032.00e+00 3.00e+00 4.00e+00 0.00e+00 -4.00e-03 7.50e+02 0.00e+003.00e+00 3.00e+00 0.00e+00 0.00e+00 0.00e+00 -7.50e+02 1.00e+03
Je veux écrire la matrice dans le fichier texte au format matriciel approprié. Comment puis-je faire ceci? J'ai utilisé le mot clé newline = '\ n' ou newline = '', mais le résultat est le même.
Merci d'avance...
=======
Cette partie éditée est pour @Warren
essaye celui-là:
>>> import numpy as np
>>> mat=np.matrix([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
>>> mat
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> np.savetxt('text.txt',mat,fmt='%.2f')
dans mon fichier text.txt, j'obtiens:
1,00 2,00 3,004,00 5,00 6,007,00 8,00 9,00
comme la réponse de Francesco Nazzaro, mais un peu différent pour vous assurer que le fichier peut être ouvert avec succès, essayez:
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mat = np.matrix(a)
with open('outfile.txt','wb') as f:
for line in mat:
np.savetxt(f, line, fmt='%.2f')
Pour recréer la forme, vous devez enregistrer la forme lorsque vous enregistrez le fichier.
Essayer:
import numpy as np
import re
result=np.array([[1.,0.,0.,0.00375,-0.01072,-0.,-1000.,],
[2.,3.,4.,0.,-0.004,750.,0.],
[3.,3.,0.,0.,0.,-750.,1000.]])
with open('/tmp/test', 'w') as fout:
fout.write(u'#'+'\t'.join(str(e) for e in result.shape)+'\n')
result.tofile(fout)
with open('/tmp/test', 'rb') as f:
line=f.readline().decode('ascii')
if line.startswith('#'):
shape=Tuple(map(int, re.findall(r'(\d+)', line)))
else:
raise IOError('Failed to find shape in file')
result2=np.fromfile(f)
result3=result2.reshape(shape)
print(np.array_equal(result, result2))
# False
print(np.array_equal(result, result3))
# True
Vous pouvez enregistrer la forme sous une forme ou une autre dans le fichier afin de recréer la même forme. Assurez-vous cependant de ne pas oublier les données au début du fichier, car contrairement à np.loadtxt , les lignes commençant par #
sont toujours considérés comme des données.
Si vous souhaitez utiliser uniquement numpy
:
import numpy as np
mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
with open('outfile.txt') as f:
for line in mat:
np.savetxt(f, line, fmt='%.2f')
puis
cat outfile.txt
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00
Pandas a to_csv
méthode:
import numpy as np
import pandas as pd
mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data=mat.astype(float))
df.to_csv('outfile.csv', sep=' ', header=False, float_format='%.2f', index=False)
il a la même sortie:
cat outfile.csv
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00