मॉडल में कमी के लिए, मैं बाएं से जुड़े एकवचन वैक्टर की गणना करना चाहता हूं - 20 का कहना है - मैट्रिक्स सबसे बड़ा एकवचन मान , जहां और । दुर्भाग्य से, मेरी मैट्रिक्स बिना किसी संरचना के घनी होगी। एन ≈ 10 6 कश्मीर ≈ 10 3 ए
यदि मैं इस आकार के एक यादृच्छिक मैट्रिक्स के लिए पायथन में मॉड्यूल svd
से रूटीन को कॉल करता numpy.linalg
हूं, तो मैं एक मेमोरी त्रुटि में चला जाता हूं। यह विघटन लिए के आवंटन के कारण है । ए = वी एस यू
क्या चारों ओर एल्गोरिदम हैं, जो इस नुकसान से बचते हैं? उदाहरण के लिए केवल एकवचन वैक्टर की स्थापना करके गैर-अक्षीय मूल्यों के साथ आत्मसात किया।
मैं गणना समय और सटीकता में व्यापार करने के लिए तैयार हूं।
full_matrices
कि गलत पर सेट किया जाए ताकि केवल 'नॉनजरो' भागों की गणना की जा सके। फिर भी, क्या गणना को आगे भी कम करने का एक तरीका है?
numpy
बैकएंड fortran कोड, का उपयोग करता है LAPACKE_dgesvd
मानक SVD के लिए नियमित। हालाँकि, आमतौर पर आपका मैट्रिक्स C_CONTIGOUS
(साथ जांचें matrix.flags
) है। इसलिए यह फोरट्रान संरेखण के डेटा की प्रतिलिपि बनाता है। इसके अतिरिक्त लैपैक रूटीन को चलाने के दौरान आपके मैट्रिक्स की एक और कॉपी की जरूरत होती है (या इसके लिए कम से कम मेमोरी)। आप एक प्रति से छुटकारा पा सकते हैं यदि आप सुनिश्चित करें कि स्मृति संरेखण शुरुआत से ही फोरट्रान शैली है।