matlab

2010-02-02 11 views
8

का उपयोग करके एक बहुत बड़ा मैट्रिक्स कैसे बनाएं I matlab के साथ कोई समस्या है जब मैं 40000x40000 जैसे बहुत बड़े आकार के साथ एक मैट्रिक्स बनाने की कोशिश कर रहा हूं।matlab

उदाहरण के लिए

:

एक्स = शून्य (40000,40000);

त्रुटि संदेश "??? अधिकतम चर आकार कार्यक्रम द्वारा अनुमति से अधिक हो गई है।"

कोई समाधान है।

इसके अलावा मेरे पास एक और सवाल है, क्या हमारे पास जावा में परिवर्तनीय कॉलम आकार के साथ एक मैट्रिक्स हो सकता है।

उत्तर

1

40k * 40k => 1.6 * 10^9 संख्याएं। मेरा मानना ​​है कि जेरोस फ्लोट लौट आएगा। तो आपको इसके लिए 1.6 * 10^9 फ्लोट्स * 4 बाइट्स/फ्लोट => 6.4 जीबी रैम की आवश्यकता होगी केवल एक के लिए परिवर्तनीय ...

क्या आप इस बात की शर्मिंदा हैं कि आपको इतनी बड़ी सरणी चाहिए?

16

40000 * 40000 * 8 बाइट प्रति संख्या = 12 जीबी, निश्चित रूप से आपके पास पर्याप्त स्मृति नहीं होगी।

m = sparse(40000, 40000) 

वेरिएंट की एक सरणी बनाने के लिए, आप एक सेल सरणी उपयोग कर सकते हैं:

शून्य के बहुत सारे के साथ एक विशाल मैट्रिक्स बनाने के लिए, आप एक विरल मैट्रिक्स की जरूरत

m = cell(3, 1) 
m(1) = [1,2,3] 
m(2) = [2,4,6,8,10] 
m(3) = 6+6i 
0

नहीं, अच्छी तरह से हाँ, जैसा कि नीचे बताया गया है, अधिक रैम खरीदें। स्पैस सिर्फ शून्य तत्वों को हटा देता है।

और मैटलैब में आप एक बड़ा मैट्रिक्स बनाने के लिए केवल नए कॉल/पंक्तियों को मैट्रिक्स में जोड़ सकते हैं।

आह लेकिन आपका मतलब है, क्या आपके पास एक मैट्रिक्स है जहां एक कॉलम 10 पंक्तियां है, और दूसरा उदाहरण के लिए 20 है। नहीं, आप ऐसा नहीं कर सकते। ऐसा नहीं लगता था कि आप जावा टीबीएच में कर सकते हैं।

3

यदि आपको वास्तव में बड़ी मैट्रिक्स की आवश्यकता है, तो आप कई मशीनों की स्मृति को दोहन करने के लिए Parallel Computing Toolbox (और MATLAB Distributed Computing Server) का उपयोग कर सकते हैं। यह आपको लिखने के लिए अनुमति होगी:

matlabpool open <a large number> 
x = distributed.zeros(40000, 40000); 

यह भी देखें: doc for codistributed arrays

4

वहाँ बहुत सी बातें आप कर सकते हैं के रूप में विभिन्न सवालों के जवाब का कहना है। सही उत्तर आपकी वास्तविक समस्या पर निर्भर करता है। इस तरह की एक बड़ी सरणी का ब्रूट फोर्स सृजन मैटलैब के 64 बिट संस्करण के बिना असंभव है और उस बड़े सरणी को स्टोर करने के लिए पर्याप्त मेमोरी है, या सरणी को किसी अन्य तरीके से संग्रहीत करना असंभव है। आप सरणी को ऑफलाइन स्टोर कर सकते हैं, केवल उस चीज को ला सकते हैं जब आप इसे इस्तेमाल करते हैं।

उदाहरण के लिए, यदि ये संख्या हमेशा छोटे पूर्णांक होंगी, तो uint8 या int8, या लॉजिकल सरणी का उपयोग करें, यहां तक ​​कि एक सरणी भी, जिसमें से सभी डबल सरणी की तुलना में स्मृति आवश्यकताओं को कम कर देंगे। या उपयुक्त के रूप में एक स्पैस भंडारण फॉर्म का उपयोग करें। इस बात पर निर्भर करता है कि आप सरणी के साथ क्या करेंगे।

एक पंक्ति में तत्वों की एक चर संख्या के रूप में, यहां एक सेल सरणी का उपयोग करें, न कि एक फ्लैट पारंपरिक सरणी।

0

मुझे लगता है कि स्टोर करने के लिए उपयोग हार्ड डिस्क फाइल स्मृति समस्या को हल

1

एक तरीका यह है कि डेटा सबसे अच्छा विकल्प है अपने मैट्रिक्स के लिए एक matfile बनाने के लिए हो सकता है। जिस तरह से मैं समझता हूं कि यह स्मृति को छोड़ देता है और इसे सीधे आपकी हार्ड डिस्क पर लिखता है। मैंने मैट्रिस के लिए यह कोशिश की है जो मेरे डरावनी कंप्यूटर की स्मृति के लिए बहुत बड़ी थी, और यह धीमी थी, लेकिन यह काम किया। आपको शायद इसे एक समय में थोड़ा सा बनाना होगा।