2012-12-02 12 views
6

को पुनर्स्थापित करने के लिए निर्दिष्ट करने की क्या आवश्यकता है numpy सरणी के कच्चे बाइनरी प्रस्तुति को देखते हुए, सरणी को अनजाने में पुनर्स्थापित करने के लिए आवश्यक मेटाडेटा का पूरा सेट क्या है?numpy's tostring/fromstring --- मुझे

उदाहरण के लिए,

>>> np.fromstring(np.array([42]).tostring()) 
array([ 2.07507571e-322]) 

जो उम्मीद की जा करने के लिए है (एक मसा के साथ, कम से कम): यहाँ मैं fromstring नहीं बताया है ints की उम्मीद है, इसलिए यह डिफ़ॉल्ट नाव के साथ चला जाता है।

लेकिन ऐसा लगता है कि केवल dtype=np.float64 निर्दिष्ट करना या समान हो सकता है या पर्याप्त नहीं हो सकता है। उदाहरण के लिए,

>>> a = np.array([42.]) 
>>> a.dtype 
dtype('float64') 
>>> a.dtype.byteorder 
'=' 

जो the docs tell me का अर्थ है 'मूल आदेश'। मतलब, यह एक बड़े एंडियन और छोटी-अंत मशीनों पर अलग-अलग व्याख्या की जा रही है --- या क्या मुझे कुछ आसान याद आ रही है?

+0

sys.byteorder फिर से बदला जा सकता है मशीन के endianness देता है। ऐसा लगता है कि आपको यह मूल्य भी सहेजना होगा। – unutbu

+1

प्लेटफ़ॉर्म-स्वतंत्र तरीके से numpy array को सहेजने/लोड करने के लिए आप [numpy.save/.load फ़ंक्शंस] का उपयोग कर सकते हैं (http://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html# numpy.load)। – jfs

+0

@ जेएफ। सेबेस्टियन: एक सरणी के लिए, हाँ। मेरे मामले में, मेरे पास 10 से 100 हजार सरणी हैं, जिन्हें मैं एक स्क्लाइट डीबी (अन्य, गैर-सरणी सामग्री के साथ) पर डंप कर रहा हूं। इसके अलावा, मैं केवल उत्सुक हूं कि प्लेटफ़ॉर्म-स्वतंत्र होने के लिए क्या होता है :-)। –

उत्तर

3

sys.byteorder मशीन की अंतहीनता देता है।


हालांकि, @ J.F.Sebastain, @seberg और @jorgeca के रूप में सुझाव दिया है, np.savez जाने के लिए एक बेहतर तरीका है। help docstring shows

import io 
content = io.BytesIO() 
np.savez(content, x=x, y=y) 
content.seek(0) 

जो आपको एक SQLite डेटाबेस के लिए स्ट्रिंग content बचा सकता है का मतलब है।

फिर, जब आप डेटाबेस से इस स्ट्रिंग का चयन करें, यह NumPy सरणी में साथ

data = np.load(content) 
+0

आप 'StringIO' के बजाय' tempfile' का उपयोग क्यों करते हैं? – seberg

+0

@seberg: हाँ, आप सही हैं - सुधार के लिए धन्यवाद! एक स्ट्रिंगियो (या भविष्य की संगतता, एक बाइट्सियो) यहां बेहतर होगा। – unutbu