2012-10-03 23 views
8

मैं एक बड़ी संख्यात्मक सरणी को सहेजने और इसे पुनः लोड करने का प्रयास कर रहा हूं। numpy.save और numpy.load का उपयोग करके, सरणी मान दूषित/परिवर्तित हो जाते हैं। सरणी की पूर्व-बचत, और पोस्ट-लोडिंग का आकार और डेटा प्रकार समान है, लेकिन पोस्ट-लोडिंग सरणी में शून्य मानों का विशाल बहुमत है। सरणी (22 9 15,22 9 15) है, मान फ्लोट 64 हैं, 3.94 जीबी एक .npy फ़ाइल के रूप में लेते हैं, और डेटा प्रविष्टियों का औसत लगभग 1 (छोटे फ्लोट्स जो उचित रूप से शून्य में परिवर्तित हो सकते हैं)। मैं numpy 1.5.1 का उपयोग कर रहा हूँ।numpy save/load एक सरणी दूषित

इस भ्रष्टाचार के कारण किसी भी मदद की सराहना की जाएगी क्योंकि मुझे नुकसान हुआ है। नीचे कुछ दावों के सबूत प्रदान करने वाला कोड है।

In [7]: m 
Out[7]: 
     array([[ 0.  , 0.02023, 0.00703, ..., 0.02362, 0.02939, 0.03656], 
      [ 0.02023, 0.  , 0.0135 , ..., 0.04357, 0.04934, 0.05651], 
      [ 0.00703, 0.0135 , 0.  , ..., 0.03037, 0.03614, 0.04331], 
      ..., 
      [ 0.02362, 0.04357, 0.03037, ..., 0.  , 0.01797, 0.02514], 
      [ 0.02939, 0.04934, 0.03614, ..., 0.01797, 0.  , 0.01919], 
      [ 0.03656, 0.05651, 0.04331, ..., 0.02514, 0.01919, 0.  ]]) 
In [8]: m.shape 
Out[8]: (22195, 22195) 

In [12]: save('/Users/will/Desktop/m.npy',m) 

In [14]: lm = load('/Users/will/Desktop/m.npy') 

In [15]: lm 
Out[15]: 
     array([[ 0.  , 0.02023, 0.00703, ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       ..., 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ]]) 
In [17]: type(lm[0][0]) 
Out[17]: numpy.float64 

In [18]: type(m[0][0]) 
Out[18]: numpy.float64 

In [19]: lm.shape 
Out[19]: (22195, 22195) 
+1

क्या आपने कोशिश की है, या Numpy के एक नए संस्करण को आजमाने में सक्षम हैं? – nneonneo

+0

मैं नहीं कर सकता - 1.5.1 अन्य पुस्तकालयों के लिए निर्भरता है जिसका मैं उपयोग कर रहा हूं। यदि यह एक अद्यतन संस्करण में तय किया गया है (जो मैंने किए गए खोजों में कुछ सबूत दिए थे) तो शायद मैं अपग्रेड करने का प्रयास कर सकता हूं, हालांकि स्पष्ट रूप से इससे अधिक/अन्य समस्याएं हो सकती हैं। – wdwvt1

+3

युगल चीजों को आजमाएं: 1) उस स्थिति की तलाश करें जहां सरणी शून्य हो जाती है, 2) अलगाव में सरणी की अंतिम पंक्ति/कॉलम को प्रिंट करने का प्रयास करें (यह देखने के लिए कि यह एक अजीब मुद्रण समस्या हो सकती है), 3) कोशिश करें 'लोड' के लिए दूसरे पैरामीटर के रूप में 'r'' निर्दिष्ट करके मेमोरी मैपिंग का उपयोग करना। – nneonneo

उत्तर

1

यह एक ज्ञात issue (ध्यान दें कि कि numpy 1.4 के खिलाफ लिंक) है। यदि आप वास्तव में अपग्रेड नहीं कर सकते हैं, तो मेरी सलाह एक अलग तरीके से बचाने की कोशिश करेगी (savez, savetxt)। यदि गेटबफर उपलब्ध है तो आप बाइट्स को सीधे लिखने का प्रयास कर सकते हैं। अगर सब कुछ विफल हो जाता है (और आप अपग्रेड नहीं कर सकते हैं), तो आप अपना खुद का सेव फ़ंक्शन बहुत आसानी से लिख सकते हैं।

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