2012-11-06 16 views
5

sto cercando di scrivere poche righe in un file di testo, ed ecco il codice che ho usato:numpy.savetxt "indice di tuple fuori intervallo"?

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

Quando il codice viene eseguito fino alla linea con savetxt, ottengo questo errore:

 IndexError: tuple index out of range 

Qualche idea del perché questo accada? Ho provato a rimuovere la parte "fmt", ma ottengo la stessa cosa.

+1

perché non si utilizza semplicemente np.savetxt (file di uscita, dati, fmt = '% 1.4e')? – EnricoGiampieri

+0

Funziona! Inizialmente pensavo di eseguire più volte attraverso un ciclo for, e ogni volta che eseguivo un ciclo, aggiungo una nuova colonna sulla destra. È possibile farlo. Grazie! – mcglashan

+0

ti ho dato una risposta completa, se è abbastanza libero di impostarlo come risposta alla domanda – EnricoGiampieri

risposta

5

il problema è che numpy.save si aspetta un array con alcune informazioni di forma, mentre si passa solo un numero.

se si desidera passare un elemento al momento (ma vi consiglio di salvare l'intero array) è necessario convertire prima a una matrice NumPy con una forma di almeno un

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

questo è perché la forma di un numero unico è una tupla vuoto, e scrivere su file che cercare di dividere lungo la prima dimensione

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

per salvare l'intera matrice è sufficiente fare:

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

Ha senso! Grazie. – mcglashan

+0

dovrebbe essere np.array invece di matrice sopra. – jaamit

Problemi correlati