J'ai un tableau numpy de forme
a = [1,2,3]
que je veux enregistrer dans un fichier .txt tel que le fichier se présente comme suit:
1 2 3
Si j'utilise numpy.savetxt, je reçois un fichier du type:
1
2
3
Il devrait y avoir une solution facile à cela, je suppose, des suggestions?
Si numpy >= 1.5
, vous pouvez faire:
# notez que le nom du fichier est entouré de guillemets,
# exemple "filename.txt"
numpy.savetxt("filename", a, newline=" ")
Modifier
plusieurs tableaux 1D de même longueur
a = numpy.array([1,2,3])
b = numpy.array([4,5,6])
numpy.savetxt(filename, (a,b), fmt="%d")
# gives:
# 1 2 3
# 4 5 6
plusieurs tableaux 1D de longueur variable
a = numpy.array([1,2,3])
b = numpy.array([4,5])
with open(filename,"w") as f:
f.write("\n".join(" ".join(map(str, x)) for x in (a,b)))
# gives:
# 1 2 3
# 4 5
Une autre solution consiste à remodeler le tableau afin qu'il ait les dimensions (1, N)
comme suit:
savetext(filename, a.reshape(1, a.shape[0]))
import numpy
a = numpy.array([1,2,3])
with open(r'test.txt', 'w') as f:
f.write(" ".join(map(str, a)))
J'ai trouvé que la première solution dans la réponse acceptée était problématique dans les cas où le caractère de nouvelle ligne est toujours requis. La solution la plus simple au problème était la suivante:
numpy.savetxt(filename, [a], delimiter='\t')
import numpy as np
a = [1,2,3]
b = np.array(a).reshape((1,3))
np.savetxt('a.txt',b,fmt='%d')
Je sais que c'est vieux, mais aucune de ces réponses n'a résolu le problème fondamental de numpy de ne pas enregistrer le tableau par rangée. J'ai trouvé que cette doublure a fait l'affaire pour moi:
b = np.matrix(a)
np.savetxt("file", b)
Très très facile: [1,2,3]
Une liste est comme une colonne.
1
2
3
Si vous voulez une liste semblable à une ligne, doublez corchete:
[[1, 2, 3]] ---> 1, 2, 3
et
[[1, 2, 3], [4, 5, 6]] ---> 1, 2, 3
4, 5, 6
Finalement:
np.savetxt("file", [['r1c1', 'r1c2'], ['r2c1', 'r2c2']], delimiter=';', fmt='%s')
Remarque, la virgule entre crochets, la liste intérieure sont des éléments de la liste extérieure