pytables
का उपयोग करते समय, scipy.sparse
मैट्रिक्स प्रारूपों के लिए कोई समर्थन नहीं है (जहां तक मैं बता सकता हूं), इसलिए मैट्रिक्स को स्टोर करने के लिए मुझे कुछ रूपांतरण करना है, उदा।pytables का उपयोग करना, जो अधिक कुशल है: scipy.sparse या numpy घने मैट्रिक्स?
def store_sparse_matrix(self):
grp1 = self.getFileHandle().createGroup(self.getGroup(), 'M')
self.getFileHandle().createArray(grp1, 'data', M.tocsr().data)
self.getFileHandle().createArray(grp1, 'indptr', M.tocsr().indptr)
self.getFileHandle().createArray(grp1, 'indices', M.tocsr().indices)
def get_sparse_matrix(self):
return sparse.csr_matrix((self.getGroup().M.data, self.getGroup().M.indices, self.getGroup().M.indptr))
मुसीबत get_sparse
समारोह कुछ समय (डिस्क से पढ़ने) लेता है, और अगर मैं समझता हूँ कि इसे सही ढंग से भी स्मृति में फिट करने के लिए डेटा की आवश्यकता है कि है।
एकमात्र अन्य विकल्प मैट्रिक्स को घने प्रारूप (numpy array
) में परिवर्तित करने लगता है और फिर pytables
सामान्य रूप से उपयोग करता है। हालांकि यह अपेक्षाकृत अक्षम है, हालांकि मुझे लगता है कि शायद pytables
संपीड़न से निपटेंगे?
एक नियमित NumPy सरणी का उपयोग निश्चित रूप से स्मृति में फिट करने के लिए शून्य सहित समस्त मैट्रिक्स की आवश्यकता होगी। आप अपने एल्गोरिदम में स्पष्टीकरण का भी फायदा नहीं उठा पाएंगे। लेकिन आपका सवाल वास्तव में क्या है? –
@ लार्समैन लेकिन जब pytables के साथ संयोजन में NumPy सरणी का उपयोग करते हैं, तो मेरी समझ यह है कि यह आवश्यक होने पर केवल डिस्क से लोड होता है, और इसलिए पूरे मैट्रिक्स को स्मृति में फिट नहीं होना चाहिए। हालांकि यह आवश्यक है कि ज़ीरो समेत संपूर्ण मैट्रिक्स डिस्क पर संग्रहीत है (और इसलिए आवश्यक होने पर भी डिस्क पर पढ़ें/लिखा गया है)। ऐसा लगता है कि इससे अनावश्यक ओवरहेड बन जाएगा, जब वास्तव में केवल कुछ मूल्यों को पढ़ने की आवश्यकता हो सकती है। हालांकि scipy.sparse के लिए देशी समर्थन के बिना मैं यह नहीं देख सकता कि इससे कैसे बचें? – tdc
तो सवाल यह है, "क्या यह मांग सीएसआर मैट्रिक्स को लोड करेगा?" मैं इसका उत्तर नहीं दे सकता क्योंकि मुझे PyTables नहीं पता है। मुझे पता है कि आप mmap'd arrays द्वारा समर्थित सीएसआर मैट्रिक्स बना सकते हैं ... –