2016-02-12 12 views
22

:numpy.savetxt ben numpy.savetxt kullanarak bir txt dosyası içine bir numpy matrisi (NX3, float64) kurtarmaya çalışıyorum 3.5

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

Bu çizgi piton 2.7 çalışmış ancak piton 3.5, aşağıdaki hatayı alıyorum:

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

Ben baskısını, savetxt koduna catch bloğunda hata (traceback.format_exc()) kaldığımı (numpy.lib .npyio, satır 1158), hata tamamen farklı:

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

istisna çıkan kod satırı şöyledir:

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

Ben asbytes kaldırmak için çalıştı ve hatayı düzeltmek gibi görünüyor. Numpy'de bir böcek mi?

cevap

23

savetxt, dosyayı wb modunda açar ve böylece her şeyi bayt olarak yazar. Birlikte dosyayı açmak yerine ise

'w', senin ikinci hatayı alıyorum:

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 

Ama

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 

Bu Py3.4 üzerinde hiçbir problem var; 3.5 Python'um ile numpy yüklü değil. Ama bir fark beklemezdim.

sisteminizde

'%.5f'%1.2342 

çalışır mı? Ayrıca,

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

'u da deneyebilirsiniz. İşe yaradı! Ben de bu dosyaya yazı yazıyorum, bu yüzden önce 'w' ile açmaya ve sonra 'ab' ile yeniden açmaya ihtiyacım vardı. –

+1

"b'one two three'" ile bayt dizeleri oluşturabilirsiniz. – hpaulj

+0

Bir 'io.StringIO' nesnesine yazarken aynı hatayı aldım. Bu durumda çözüm, bir 'io.BytesIO' nesnesiyle değiştirmektir. – SiggyF

İlgili konular