2012-11-06 13 views
5

Próbuję napisać kilka wierszy w pliku tekstowym, a oto kod użyłem:numpy.savetxt "Indeks krotek poza zasięgiem"?

import numpy as np 

# Generate some test data 
data = np.arange(0.0,1000.0,50.0) 

with file('test.txt', 'w') as outfile:  
    outfile.write('# something') 

    for data_slice in data: 
     np.savetxt(outfile, data_slice, fmt='%1.4e') 

     outfile.write('# New slice\n') 

Gdy kod biegnie do linii z savetxt, otrzymuję ten błąd:

 IndexError: tuple index out of range 

Każdy pomysł, dlaczego tak się dzieje? Próbowałem usunąć część "fmt", ale mam to samo.

+1

dlaczego nie używasz po prostu np.savetxt (outfile, data, fmt = '% 1.4e')? – EnricoGiampieri

+0

To działa! Początkowo myślałem o wielokrotnym uruchamianiu pętli for, a za każdym razem, gdy przechodzę przez nią, dodam nową kolumnę po prawej stronie. Czy jest to możliwe do zrobienia. Dzięki! – mcglashan

+0

dałem ci pełną odpowiedź, jeśli wystarczyłoby, aby ustawić ją jako odpowiedź na pytanie – EnricoGiampieri

Odpowiedz

5

Problem polega na tym, że numpy.save spodziewa się tablicy z pewnymi informacjami o kształcie, a ty przekazujesz ją po prostu liczbie.

jeśli chcesz przekazać jeden element na raz (ale proponuję, aby zapisać całą tablicę) trzeba je najpierw przekonwertować do numpy tablicy w kształcie co najmniej jednej

np.savetxt(outfile, array(data_slice).reshape(1,), fmt='%1.4e') 

to jest tak, ponieważ kształt pojedynczego numeru jest nieważna krotka i zapisu do pliku to spróbuj podzielić wzdłuż pierwszego wymiaru

array(1).shape == tuple() 
#True 

zapisać całą tablicę wystarczy zrobić:

np.savetxt(outfile, data, fmt='%1.4e') 
+0

ma sens! Dzięki. – mcglashan

+0

powinien to być np.array zamiast powyższej tablicy. – jaamit

Powiązane problemy