में इसी तरह के विधि मैं Matlab R2011b चलाने के लिए और आर संस्करण 2.13.1 रैम 16 जीबी के साथ लिनक्स टकसाल v12 पर की तुलना में अत्यधिक रैम का उपयोग करता है।textscan आर
मैं एक csv फ़ाइल है। पहली 5 पंक्तियां (और शीर्षलेख) है:
#RIC,Date[G],Time[G],GMT Offset,Type,Price,Volume
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.66,300
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.65,1000
DAEG.OQ,07-JUL-2011,15:10:03.464,-4,Trade,1.65,3180
फ़ाइल बड़ी (लगभग 900 एमबी) है।
fid1 = fopen('/home/MyUserName/Temp/X.csv');
D = textscan(fid1, '%s%s%s%f%s%f%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);
हालांकि फ़ाइल 900MB है, जब ऊपर कोड चल रहा है, सिस्टम मॉनिटर इंगित करता है मेरी RAM उपयोग 2GB के बारे में से 10GB करने के लिए कूदता है: चरित्र और संख्यात्मक डेटा के संयोजन को देखते हुए, एक के रूप में इस matlab में इस फाइल को पढ़ सकता है । इससे भी बदतर, अगर मैं थोड़ी बड़ी सीएसवी फ़ाइल (लगभग 1.2 जीबी) के साथ इसी प्रक्रिया का प्रयास करता हूं तो मेरी रैम 16 जीबी पर अधिकतम हो जाती है और मैटलैब डेटा में पढ़ने को पूरा करने में कभी भी प्रबंधन नहीं करता है (यह सिर्फ "व्यस्त" मोड में फंस जाता है)।
अगर मैं आर में एक ही फाइल को पढ़ने के लिए चाहता था, मैं उपयोग कर सकते हैं:
D <- read.csv("/home/MyUserName/Temp/X.csv", stringsAsFactors=FALSE)
इसमें कुछ समय मैटलैब से अधिक समय लेता है, लेकिन सिस्टम पर नजर रखने को इंगित करता है मेरी RAM उपयोग केवल 3.3GB के लिए 2GB से कूदता है (ज्यादा मूल फ़ाइल आकार दिया गया अधिक उचित)।
1) क्यों textscan
है इस तरह के एक स्मृति इस परिदृश्य में हॉग:
मेरा प्रश्न के दो भाग हैं?
2) एक और दृष्टिकोण मैं रैम बाहर maxing के बिना अपने सिस्टम पर मैटलैब में इस प्रकार का एक 1.2GB csv फ़ाइल प्राप्त करने के लिए इस्तेमाल कर सकते हैं है?
संपादित करें: बस स्पष्ट करने के लिए, मैं करने के लिए कि क्या वहाँ एक matlab-एकमात्र समाधान मौजूद है के रूप में उत्सुक हूँ, यानी मैं एक समाधान है कि छोटे में csv फ़ाइल को तोड़ने के लिए एक अलग भाषा का उपयोग करना शामिल में कोई दिलचस्पी नहीं हूँ भाग (जैसा कि मैं पहले से ही कर रहा हूं)। क्षमा करें Trav1s, मुझे शुरुआत से यह स्पष्ट करना चाहिए था।
धन्यवाद एंड्रयू, यह सवाल का एक अच्छा जवाब जैसा दिखता है, लेकिन मुझे कल तक विस्तार से पढ़ने का मौका नहीं मिलेगा (मैं काम पर हूं)। विलंब के लिए खेद है। –
एंड्रयू, अच्छा जवाब +1, धन्यवाद। –