2012-03-05 10 views
21

mam numpy wachlarz postaciZapisywanie numpy tablicy do pliku txt rzędu mądry

a = [1,2,3] 

którego chcę zapisać do pliku .txt takie, że plik wygląda następująco:

1 2 3 

Jeśli używam numpy.savetxt potem pobrać plik jak:

1 
2 
3 

Nie powinno być proste rozwiązanie tego przypuszczam, jakieś sugestie?

+1

Czy zajmujesz się tylko tablicami 1D? –

Odpowiedz

25

Jeśli numpy >= 1.5, można zrobić:

# note that the filename is enclosed with double quotes,
# example "filename.txt"

numpy.savetxt("filename", a, newline=" ") 

Edycja

kilka 1D tablice z tej samej długości

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 

kilka 1D Macierze o zmiennej długości

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 
+0

Co się stanie, jeśli nowa identyczna tablica zostanie dodana do pliku w następnym wierszu. Jak przerwać linię pierwszej linii i kontynuować w drugiej linii? – Palle

+1

@PatrikT: Jeśli masz więcej niż jedną tablicę 1D możesz po prostu zrobić 'numpy.savetxt (filename, (a, b, c))'. Oszczędza wiersz mądry. Ale powinny one mieć ten sam rozmiar. – Avaris

+0

Co jeśli np. a jest krótszy niż b i c? Jak mogę zachować te 3 tablice w mądrym rzędzie? – Palle

-1

tylko

' '.join(a) 

i pisać to wyjście do pliku.

+3

To da "TypeError: element sekwencji 0: oczekiwany ciąg, numpy.int32 found", więc musisz najpierw przekonwertować na ciąg znaków przed dołączeniem. – BioGeek

+0

'' .join (str (x) dla x w a) –

5
import numpy 
a = numpy.array([1,2,3]) 

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

Alternatywnym rozwiązaniem jest przekształcić tablicę tak, że ma wymiary (1, N) tak:

savetext(filename, a.reshape(1, a.shape[0])) 
1

Okazało się, że pierwsze rozwiązanie w przyjętym odpowiedź być problematyczne dla przypadków gdzie znak nowej linii jest nadal wymagany. Najłatwiej było rozwiązać ten problem:

numpy.savetxt(filename, [a], delimiter='\t')