2016-02-12 56 views
22

我試圖用numpy.savetxt保存numpy的矩陣(NX3,float64)到一個txt文件:numpy.savetxt在python產生的格式不匹配錯誤3.5

np.savetxt(f, mat, fmt='%.5f', delimiter=' ') 

這條線在Python 2.7工作,但是在Python 3.5,我發現了以下錯誤:

TypeError: Mismatch between array dtype ('float64') and format specifier ('%.5f %.5f %.5f')

當我步入savetxt代碼,印刷在catch塊中的錯誤(traceback.format_exc())(numpy.lib .npyio,行1158),錯誤是完全不同的:

TypeError: write() argument must be str, not bytes

而產生的異常代碼行如下:

fh.write(asbytes(format % tuple(row) + newline)) 

我試圖刪除asbytes,它似乎解決這個錯誤。這是一個在numpy中的錯誤?

回答

23

savetxtwb模式打開文件,從而將所有內容寫入字節。

相反,如果我打開該文件與 'W',我知道你的第二個錯誤:

In [403]: x=np.ones((3,3),dtype=np.float64) 
In [404]: with open('test.txt','w') as f: 
    np.savetxt(f,x,fmt='%.5f') 
    .....:  
TypeError: must be str, not bytes 

但有與

In [405]: with open('test.txt','wb') as f: 
    np.savetxt(f,x,fmt='%.5f') 
    .....:  
In [406]: cat test.txt 
1.00000 1.00000 1.00000 
1.00000 1.00000 1.00000 
1.00000 1.00000 1.00000 

這是Py3.4沒有問題的;我沒有用我的3.5 Python安裝numpy。但我不希望有什麼區別。

請問您的系統上

'%.5f'%1.2342 

工作?您也可以嘗試

'%.5f %.5f %.5f'%tuple(mat[0,:]) 
+1

謝謝!有效!我正在給這個文件寫文本,所以首先我需要用'w'打開它,然後用'ab'重新打開它。 –

+1

您可以使用'b'one two three''創建字符串。 – hpaulj

+0

寫入「io.StringIO」對象時發生同樣的錯誤。在這種情況下,解決方案是用'io.BytesIO'對象替換它。 – SiggyF

相關問題