2015-08-27 14 views
5

So come scrivere il file txt usando numpy.savetxt() ma non riesco a farlo scrivere il file usando solo numeri interi. Ho il seguente codice:Come scrivere un solo array 2D numpy su un file txt

new_picks = new_picks.astype(int) 
np.savetxt(fname='newPicksData.txt', X=new_picks.astype(int)) 

Questo è come la matrice che sto ricevendo assomiglia:

2.900000000000000000e+01 3.290000000000000000e+02 1.000000000000000000e+00 
4.300000000000000000e+01 1.080000000000000000e+02 1.000000000000000000e+00 
4.300000000000000000e+01 1.950000000000000000e+02 1.000000000000000000e+00 
5.600000000000000000e+01 1.510000000000000000e+02 1.000000000000000000e+00 
5.600000000000000000e+01 9.700000000000000000e+01 1.000000000000000000e+00 
7.000000000000000000e+01 2.840000000000000000e+02 1.000000000000000000e+00 
3.500000000000000000e+01 3.170000000000000000e+02 1.000000000000000000e+00 
5.400000000000000000e+01 2.110000000000000000e+02 1.000000000000000000e+00 
6.400000000000000000e+01 1.180000000000000000e+02 1.000000000000000000e+00 
5.400000000000000000e+01 3.700000000000000000e+01 1.000000000000000000e+00 
1.300000000000000000e+01 1.950000000000000000e+02 1.000000000000000000e+00 
1.300000000000000000e+01 1.680000000000000000e+02 1.000000000000000000e+00 
1.300000000000000000e+01 2.780000000000000000e+02 1.000000000000000000e+00 
4.900000000000000000e+01 2.200000000000000000e+01 1.000000000000000000e+00 
4.900000000000000000e+01 1.040000000000000000e+02 1.000000000000000000e+00 
4.900000000000000000e+01 7.500000000000000000e+01 1.000000000000000000e+00 
5.400000000000000000e+01 2.610000000000000000e+02 1.000000000000000000e+00 
5.400000000000000000e+01 2.600000000000000000e+02 1.000000000000000000e+00 
5.400000000000000000e+01 1.150000000000000000e+02 1.000000000000000000e+00 
5.400000000000000000e+01 5.400000000000000000e+01 1.000000000000000000e+00 
1.300000000000000000e+01 5.400000000000000000e+01 1.000000000000000000e+00 
4.900000000000000000e+01 5.400000000000000000e+01 1.000000000000000000e+00 

Quello che sto cercando è qualcosa di simile:

29 329 1 
43 108 1 
43 195 1 
56 151 1 
56 97 1 
+1

basta aggiungere il parametro 'fmt ="% d "' –

risposta

4

È necessario aggiungere un parametro in più in

savetxt(fname='newPicksData.txt', X=new_picks.astype(int), fmt ='%.0f\n') 

è solo la formulazione del numero effettivo.

+2

Il '\ n' non è richiesto. –

2

È necessario specificare il formato separato utilizzando l'argomento fmt, vedere la documentazione qui http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html

Devi usare la seguente sintassi per ottenere ciò che si vuole:

np.savetxt(fname='newPicksData.txt', X=new_picks.astype(int),fmt="%i") 

Omettendo tale argomento, il default è a , che è esattamente quello che si vede in uscita che hai postato nella domanda.


Inoltre, non si ha realmente bisogno la parte astype(int) nel codice? Il comando np.savetext può formattare perfettamente stringhe/doppie in int senza modificare i dati. Questo può essere dimostrato con il codice pezzo di seguito:

import numpy 
x = numpy.array([1.3,2.1,3.9,4.2,5.5,6.1]) 
numpy.savetxt(fname='newPicksData.txt', X=x, fmt="%i") 

Il codice pezzo quotata poi cede il seguente file di testo:

1 
2 
3 
4 
5 
6