2013-03-14 9 views
7

मुझे पता है कि आर में पैकेज हैं जो स्पार्स मैट्रिस को कुशलतापूर्वक स्टोर करने के लिए हैं। क्या कम रैंक मैट्रिक्स को कुशलतापूर्वक स्टोर करने का कोई तरीका है? उदाहरण के लिए:कुशलतापूर्वक एक बड़े लेकिन कम रैंक मैट्रिक्स को संग्रहीत करना

A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1) 
B <- A %*% t(A) 

अब, B भी स्मृति में स्टोर करने के लिए बड़ी है, लेकिन यह रैंक में कम है। क्या B को कुशल तरीके से बनाने और स्टोर करने का कोई तरीका है, जैसे सीपीयू या मेमोरी के लिए व्यापार करने के लिए कुछ मूल पढ़ने के तरीके (rowSums, colSums, आदि) फ्लाई पर प्रदर्शन किए जाते हैं?

तो रैंक कम है, इसका मतलब है मैट्रिक्स कई अप्रासंगिक लाइनों, जो दूसरों के रैखिक संयोजन कर रहे हैं शामिल हैं:

+0

दिलचस्प सवाल- इसमें कौन से अनुप्रयोग होंगे? (कम रैंक मैट्रिस आमतौर पर कहां दिखाई देते हैं?) –

+0

@ डेविड रॉबिन्सन: उदाहरण के लिए, उन मैट्रिस का उपयोग कुछ घनत्व मैट्रिक्स (गणना करने के लिए बहुत बड़ा है, या यहां तक ​​कि स्टोर करने के लिए) के अनुमान के रूप में किया जाता है, कुछ [अनुकूलन एल्गोरिदम] में (http://en.wikipedia.org/wiki/Limited-memory_BFGS)। –

+1

यदि आप बी अनुमानित करने के इच्छुक हैं, तो क्या आप निम्न-आयामी अनुमान का उपयोग कर सकते हैं, उदा। एसवीडी का उपयोग करें और एसवीडी के पहले एन आयाम रखें? यह सुनिश्चित नहीं है कि यह वही है जो आप चाहते हैं, लेकिन विचार करने योग्य हो सकता है। –

उत्तर

0

यहाँ एक और दृष्टिकोण, हालांकि मुझे अनुभव को पता है कि यह कैसे कुशल बड़े मैट्रिक्स के लिए होगा याद आती है। यदि मैट्रिक्स समीकरणों की रैखिक प्रणाली का प्रतिनिधित्व करता है, तो कोई एक एल्गोरिदम तैयार कर सकता है, जो उन पंक्तियों को लगातार हटा देता है।

यह जांचने के लिए कि कोई लाइन अप्रासंगिक है या नहीं, जांचें कि उस रेखा के बिना मैट्रिक्स का रैंक अभी भी वही है। मैट्रिक्स रैंक की गणना के लिए, this और that उत्तर देखें।

+1

मूल रूप से फैक्टरिंग का एक बहुत ही महंगा तरीका लगता है :-) – Jeroen

+0

क्षमा करें, लेकिन एक बहुत ही खराब विचार जो प्रतिकृति पंक्तियों के साथ केवल एक साधारण मामले के लिए काम करता है। वास्तव में, यह रैंक 1 के मैट्रिक्स को उत्पन्न करने के लिए त्रिभुज है, जिसमें कोई प्रतिकृति पंक्तियां या कॉलम नहीं हैं। इस प्रकार यादृच्छिक पंक्ति वेक्टर यू और वी चुनें, फिर यू '* वी रैंक 1 है। –

2

आपका प्रश्न पहले से ही उत्तर है: इस तरह के निम्न रैंक मैट्रिक्स को कुशलतापूर्वक स्टोर करने के लिए, आप दोनों कारकों वाली डेटा संरचना बनाते हैं। यदि मैट्रिक्स-वेक्टर गुणा की आवश्यकता है, तो यह कारकों के मैट्रिक्स-वेक्टर उत्पादों का उपयोग करके दाएं से बाएं किया जा सकता है।

इस रणनीति और डेटा संरचना का एक आवेदन सीमित स्मृति स्मृति ब्रॉडेन या बीएफजीएस अर्ध-न्यूटन विधियों के कार्यान्वयन में पाया जा सकता है।

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