2016-02-12 9 views
22

मैं numpy.savetxt का उपयोग कर एक numpy मैट्रिक्स (NX3, float64) एक txt फ़ाइल में बचाने के लिए कोशिश कर रहा हूँ:numpy.savetxt अजगर में एक स्वरूपण बेमेल त्रुटि जिसके परिणामस्वरूप 3.5

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

इस लाइन अजगर 2.7 में काम किया , लेकिन अजगर 3.5 में, मैं निम्नलिखित त्रुटि हो रही है:

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

जब मैं savetxt कोड में प्रिंट निकलते रहा हूँ, पकड़ ब्लॉक में (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 पाइथन के साथ numpy स्थापित नहीं है। लेकिन मुझे एक अंतर की उम्मीद नहीं होगी।

आपके सिस्टम पर

'%.5f'%1.2342 

काम करता है? आप

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

धन्यवाद भी कोशिश कर सकते हैं! इसने काम कर दिया! मैं इस फ़ाइल में भी टेक्स्ट लिख रहा हूं, इसलिए सबसे पहले मुझे इसे 'डब्ल्यू' के साथ खोलने की जरूरत थी, और फिर उसे 'ab' के साथ फिर से खोलना पड़ा। –

+1

आप बाइट स्ट्रिंग्स को 'बोन दो तीन' के साथ बना सकते हैं। – hpaulj

+0

मुझे 'io.StringIO' ऑब्जेक्ट को लिखते समय भी वही त्रुटि हुई थी। उस स्थिति में समाधान इसे 'io.BytesIO' ऑब्जेक्ट से प्रतिस्थापित करना है। – SiggyF

संबंधित मुद्दे