2016-06-08 15 views
1

Als ichschreibt Objektarray .txt-Datei

k=12 

rsf = np.zeros((int(k), 9), dtype='object') 

for i in range(0, int(k)): 
    rsf[i, 0] = "FREQ" 
    for j in range(1, 9): 
     rsf[i, j] = sampled[8*i+j-1, 0] 

tue und dann versuchen, es zu schreiben von

np.savetxt('test.txt', rsf, delimiter=',') 

ich einen Fehler Mismatch zwischen Array dtype erhalten ('Objekt') und Formatspezifizierer

Irgendwelche Hilfe, wie ich dieses Problem überwinden kann? (Und vielleicht auf Arrays von nicht gleich Größen hängen?)

+0

Ich bezweifle, dass dies funktionieren wird vereinfachen . 'np.savetxt' soll von' np.loadtxt' geladen werden und es ist generell nicht möglich einen unbekannten Datentyp zu laden. Warum fügen Sie der ersten Spalte jeder Zeile den gleichen String hinzu? – user545424

Antwort

4

Mehr von der Fehlermeldung:

-> 1162          % (str(X.dtype), format)) 
    1163   if len(footer) > 0: 
    1164    footer = footer.replace('\n', '\n' + comments) 

TypeError: Mismatch between array dtype ('object') and format specifier ('%.18e,%.18e,%.18e,%.18e,%.18e,%.18e,%.18e,%.18e,%.18e') 

savetxt wird über die Zeilen von rsf iteriert, und für jeden einen String zu erstellen versuchen, dass sie schreiben können zu der Datei. Ohne fmt Spezifikation von Ihnen versucht es ein Standardformat, das durch die Anzahl der Spalten wiederholt wird. Das ist die format specifier.

Dies ist ein grundlegendes Python-String-Formatierungsproblem.

In [264]: row=rsf[1,:] 

In [265]: row 
Out[265]: array(['FREQ', 8, 9, 10, 11, 12, 13, 14, 15], dtype=object) 

In [266]: '%s, %d, %d, %d, %d, %d, %d, %d, %d'%tuple(row) 
Out[266]: 'FREQ, 8, 9, 10, 11, 12, 13, 14, 15' 

so müssen Sie savetxt mit etwas nennen wie:

In [267]: fmt='%s, %d, %d, %d, %d, %d, %d, %d, %d' 

In [268]: np.savetxt('test.txt',rsf,fmt=fmt) 

In [269]: cat test.txt 
FREQ, 0, 1, 2, 3, 4, 5, 6, 7 
FREQ, 8, 9, 10, 11, 12, 13, 14, 15 
FREQ, 16, 17, 18, 19, 20, 21, 22, 23 
FREQ, 24, 25, 26, 27, 28, 29, 30, 31 
... 

oder Sie können das Format mit dem generischen '% s'

In [270]: np.savetxt('test.txt',rsf,fmt='%5s',delimiter=',') 

In [271]: cat test.txt 
FREQ, 0, 1, 2, 3, 4, 5, 6, 7 
FREQ, 8, 9, 10, 11, 12, 13, 14, 15 
FREQ, 16, 17, 18, 19, 20, 21, 22, 23 
FREQ, 24, 25, 26, 27, 28, 29, 30, 31 
FREQ, 32, 33, 34, 35, 36, 37, 38, 39 
+0

Das war sehr hilfreich. Vielen Dank! –

+0

fmt = '% 5s' was ist das? –

+1

@kRazzyR, '% 5s' ist ein normales Python-String-Format, das zum Beispiel in '% 5s '% 12' verwendet wird. – hpaulj

Verwandte Themen