web-dev-qa-db-fra.com

Enregistrement de numpy array dans un fichier txt

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? 

30
Palle

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
37
Avaris

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]))
15
Hooked
import numpy
a = numpy.array([1,2,3])

with open(r'test.txt', 'w') as f:
    f.write(" ".join(map(str, a)))
7
BioGeek

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')
2
omegamanda
import numpy as np

a = [1,2,3]    
b = np.array(a).reshape((1,3))    
np.savetxt('a.txt',b,fmt='%d')
2
Innis

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)
1
cdamayor

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

0
McKinley