2012-11-06 9 views
5

Ich versuche, ein paar Zeilen in eine Textdatei zu schreiben, und hier ist der Code, den ich verwendet:numpy.savetxt "Tupel-Index außerhalb des Bereichs"?

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') 

Wenn der Code mit savetxt an die Leitung läuft, bekomme ich diesen Fehler:

 IndexError: tuple index out of range 

Eine Idee, warum das passiert? Ich habe versucht, den "fmt" Teil zu entfernen, aber ich bekomme das Gleiche.

+1

Warum verwenden Sie nicht einfach np.savetxt (outfile, data, fmt = '% 1.4e')? – EnricoGiampieri

+0

Das funktioniert! Ich dachte ursprünglich daran, mehrere Male durch eine for-Schleife zu laufen, und jedes Mal, wenn ich eine Schleife durchlaufe, füge ich eine neue Spalte auf der rechten Seite hinzu. Ist das möglich? Vielen Dank! – mcglashan

+0

Ich gab Ihnen eine vollständige Antwort, wenn es genug ist, fiel frei, um es als Ihre Antwort auf die Frage – EnricoGiampieri

Antwort

5

das Problem ist, dass numpy.save ein Array mit einigen Forminformationen erwarten, während Sie nur eine Zahl übergeben.

wenn Sie ein Element in der Zeit an, (aber ich schlage vor, Sie das gesamte Array speichern) Sie müssen es zuerst konvertieren zu einem numpy Array mit einer Form von mindestens einem

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

diese da ist die Form einer einzigen Zahl eine Lücke Tupel ist, und es versuchen zu spalten entlang der ersten Dimension

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

speichern das gesamte Array genügt es, zu tun zu schreiben in Datei:

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

macht Sinn! Vielen Dank. – mcglashan

+0

sollte es np.array statt Array oben sein. – jaamit

Verwandte Themen