लग रहा है। मेरे पास बहुत similar problem discussion है जो आपकी मदद कर सकता है।
संक्षेप में: आप जो कर रहे हैं वह सुंदर नहीं हो सकता है - लेकिन शायद पहले से ही बहुत अच्छा हो सकता है।
मैटलैब में एक सरणी बनाते समय आमतौर पर आरक्षित स्मृति के लिए कुछ पूर्व-आवंटन करने का एक अच्छा विचार है जो प्रदर्शन को काफी हद तक गति देता है।
इस तरह एक सामान्य मामला कुछ में:
a=zeros(1,1000);
for n=1:1000
a(n)=n;
end
(यहाँ एक = 1: 1000; होगा और भी बेहतर)
वस्तुओं के लिए करने के लिए वस्तुओं की एक सौंप कर पूर्व आवंटन काम करता है सरणी में बहुत आखिरी क्षेत्र। Matlab उसके बाद अन्य क्षेत्रों को वस्तुओं (हैंडल) के साथ भर देता है जो कि उस वस्तु के निर्माता को बिना किसी तर्क के बुलाता है (Matlab help देखें)।इसलिए वस्तुओं के लिए एक पूर्व आवंटन ऐसा दिखाई दे सकता:
a(1,1000)=ObjectConstructor();
for n=1:1000
a(n)=ObjectConstructor();
end
या बस
for n=1000:-1:1
a(n)=ObjectConstructor();
end
यकीन है कि शूटर बनाना कोई तर्क के साथ कहा जा सकता है कि आप की तरह कुछ करने के लिए सक्षम होना चाहिए:
for iShooter = obj.num_shooters:-1:1
obj.ShooterArray(iShooter) = Shooter(num_targets, time_steps);
end
हालांकि, यह पता चला है कि किसी कारण से किसी अन्य ऑब्जेक्ट की संपत्ति में ऑब्जेक्ट्स की सरणी का प्रत्यक्ष भंडारण बहुत खराब प्रदर्शन करता है। (शायद इस मामले में सरणी आवंटन अच्छी तरह से काम नहीं करता है)। इसलिए एक सहायक चर का उपयोग करना और संपत्ति के लिए एक बार में पूर्ण सरणी आवंटित करना इस मामले में प्रदर्शन बढ़ाने के लिए एक अच्छा विचार है।
मैं कोशिश करेंगे:
for iShooter = obj.num_shooters:-1:1
a(iShooter) = Shooter(num_targets, time_steps);
end
obj.ShooterArray = a;
फिर से - और अधिक विस्तार के लिए देख this discussion
हैरानी की बात है आप भी 'सीधे आवंटित कर सकते हैं' में Shooter' निर्माता Shooter' सरणी: http://www.mathworks.com /help/techdoc/matlab_oop/brd4btr.html – Mikhail
मैं इसे कन्स्ट्रक्टर में आवंटित कर रहा हूं, क्या आप अस्थायी चर का उपयोग करने के बजाय इसे करने के क्लीनर तरीके से जानते हैं? शायद मुझे कुछ याद आ रही है। – bonhoffer
"क्लीनर रास्ता" व्यक्तिपरक है ... मेरा संदेश: यह न केवल 'स्क्वाड्रन' में काम करता है बल्कि सीधे 'शूटर' कन्स्ट्रक्टर में भी काम करता है। – Mikhail