2016-04-04 13 views
5

आर में, मैं एक बड़े मैट्रिक्स (127 कॉलम द्वारा 39,146,166 पंक्तियों) के साथ काम करने की कोशिश कर रहा हूं और मुझे इसमें कई परिचालनों के साथ स्मृति समस्याएं हैं। मैंने पाया है कि मैट्रिक्स में लगभग 35% प्रविष्टियां गैर-शून्य हैं, और बाकी सभी शून्य हैं। क्या यह पर्याप्त स्पैस है कि मैं आर के स्पैर मैट्रिक्स कक्षाओं में से किसी एक का उपयोग करके इस मैट्रिक्स का प्रतिनिधित्व करने वाली कुछ स्मृति को सहेज दूंगा? यह निर्धारित करने के लिए अंगूठे का एक अच्छा नियम क्या है जब एक मैट्रिक्स कम प्रतिनिधित्व करने योग्य है?मैट्रिक्स को स्पैस के रूप में प्रतिनिधित्व करने के लायक होने के लिए कितना स्पैस करता है?

+1

आपको [यह आलेख] मिल सकता है (http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r/) सहायक। – nrussell

उत्तर

2

मुझे नहीं लगता कि स्पैस का प्रतिनिधित्व इतना अधिक कॉम्पैक्ट होगा। आपको एक अंतर्निहित शून्य के अलावा प्रत्येक संख्यात्मक आइटम के लिए तीन संख्याओं की आवश्यकता है। तो यहां तक ​​कि यदि उनमें से दो 4 बाइट पूर्णांक हैं तो स्मृति में स्थान अभी भी "धारावाहिक" संग्रहण रणनीति से बड़ा होगा।

इस तर्क से 50% से अधिक कुछ अधिक संग्रहण स्थान लेगा, लेकिन मैं एसएफ बे के तहत एक आईफोन से पोस्ट कर रहा हूं इसलिए 'object.size' के साथ परीक्षण नहीं कर सकता।

+0

कई स्पैर मैट्रिक्स प्रारूप हैं, और उनमें से सभी को प्रति nonzero प्रविष्टि के लिए 3 संख्या की आवश्यकता नहीं है। उदाहरण के लिए, इस प्रारूप को मेरे मामले के लिए लगभग 2 की आवश्यकता है: http://netlib.org/linalg/html_templates/node92.html –

+0

@RyanTompson: उस प्रारूप को 3 वेक्टर की आवश्यकता है, दो –

+0

केवल उन दो वैक्टरों में से प्रत्येक के लिए एक प्रविष्टि नहीं है डेटा बिंदु। अंतिम वेक्टर में केवल प्रत्येक कॉलम के लिए एक तत्व होता है, जो मेरे मामले में नगण्य है। –

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