2016-06-08 49 views
1

當我做寫對象數組.txt文件

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] 

,然後嘗試通過

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

我得到陣列D類之間的誤差不匹配寫它(「對象」)和格式說明

任何幫助我如何克服這個問題? (也許追加到非同等大小的陣列?)

+0

我懷疑的格式,這是去上班。 'np.savetxt'意味着被'np.loadtxt'加載,並且通常不可能加載未知的數據類型。爲什麼要將相同的字符串添加到每行的第一列? – user545424

回答

4

更多的錯誤消息:

-> 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是迭代的rsf行,併爲每個試圖創建一個字符串,它可以寫到文件。如果沒有fmt規範,它會嘗試按列數重複的默認格式。這是format specifier

這是一個基本的Python字符串格式問題。

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' 

,所以你需要調用savetxt的東西,如:

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 
... 

,或者你可以簡單地用通用的「%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

這非常有幫助。非常感謝你! –

+0

fmt ='%5s'那是什麼? –

+1

@kRazzyR,'%5s'是一個正常的Python字符串格式,例如在'%5s'%12'中使用。 – hpaulj