2011-12-27 8 views
7

का उपयोग करके एक विशाल numpy सरणी का निर्माण करना मैं pytables का उपयोग कर एक विशाल numpy सरणी कैसे बना सकते हैं। मैंने कोशिश की लेकिन मुझे "ValueError: सरणी बहुत बड़ी है।" त्रुटि:pytables

import numpy as np 
import tables as tb 
ndim = 60000 
h5file = tb.openFile('test.h5', mode='w', title="Test Array") 
root = h5file.root 
h5file.createArray(root, "test", np.zeros((ndim,ndim), dtype=float)) 
h5file.close() 

उत्तर

8

आप के रूप में यह संपीड़न का समर्थन करता है लेकिन tables.CArray वर्ग का उपयोग करने की कोशिश कर सकते ...

मैं सवाल लगता है pytables क्योंकि आप numpy का उपयोग कर सरणी पैदा कर रहे साथ यह भंडारण से पहले की तुलना में numpy के बारे में अधिक है pytables।

कि जिस तरह से आप राम का एक बहुत np.zeros ((ndim, ndim) पर अमल करने की जरूरत है में - और यह शायद जगह है जहाँ अपवाद है:। "। ValueError: सरणी बहुत बड़ा है" उठाया है

तो मैट्रिक्स/सरणी तो घने आप scipy में विरल मैट्रिक्स प्रतिनिधित्व उपलब्ध इस्तेमाल कर सकते हैं नहीं है: http://docs.scipy.org/doc/scipy/reference/sparse.html

एक अन्य समाधान मात्रा के माध्यम से अपने सरणी का उपयोग करने की है, तो यह आप एक बार में पूरी सरणी की जरूरत नहीं है की कोशिश करने के लिए है - बाहर की जाँच यह धागा: Very large matrices using Python and NumPy

14

पिगबैकिंग बंद @ b1r3k की प्रतिक्रिया, एक सरणी बनाने के लिए जिसे आप एक बार में सभी तक नहीं पहुंच पाएंगे (यानी। पूरी चीज को स्मृति में लाएं), आप CArray (चंकित ऐरे) का उपयोग करना चाहते हैं। विचार यह है कि आप इसे बढ़ाएंगे और इसे बढ़ाएंगे:

import numpy as np 
import tables as tb 
ndim = 60000 
h5file = tb.openFile('test.h5', mode='w', title="Test Array") 
root = h5file.root 
x = h5file.createCArray(root,'x',tb.Float64Atom(),shape=(ndim,ndim)) 
x[:100,:100] = np.random.random(size=(100,100)) # Now put in some data 
h5file.close() 
संबंधित मुद्दे