मैं यकीन है कि यहाँ क्या हो रहा है अपने अनुक्रमण योजना एक छोटी राशि ले जा रहा है है समय की। इससे कोई फर्क नहीं पड़ता कि आप कौन सी विधि चुनते हैं, इसमें कुछ समय लगेगा, हालांकि बेहतर तरीके हैं। तार्किक एक खोज विवरण का उपयोग करने से हमेशा बेहतर होता है, लेकिन शायद सूचकांक का उपयोग केवल बेहतर है। यहां कुछ नमूना कोड दिए गए हैं जिनका उपयोग मैंने परिणामों के साथ-साथ सामानों का परीक्षण करने के लिए किया था। नोट, मैंने 2010 का उपयोग करके इसे चलाया, मुझे लगता है कि उच्च मूल्यों में कुछ प्रकार का अनुकूलन होता है, लेकिन मुझे यकीन नहीं है कि वहां क्या हो रहा है ... यह स्पष्ट है कि प्रत्यक्ष इंडेक्सिंग लॉजिकल का उपयोग करने से थोड़ा तेज़ लगता है , और किसी तरह के एक खोज बयान से बहुत तेज होना चाहिए।
function time_test
time_full_test=zeros(1e3,1);
time_part_test=zeros(1e3,1);
time_direct_indexing_full=zeros(1e3,1);
time_direct_indexing_part=zeros(1e3,1);
data=rand(1e5,1);
for i=1:1e3
time_full_test(i)=complex_stuff(data);
time_part_test(i)=complex_stuff(data,i*100);
time_direct_indexing_full(i)=complex_stuff2(data);
time_direct_indexing_part(i)=complex_stuff2(data,i*100);
end
figure;plot(time_full_test);hold all;plot(time_part_test);plot(time_direct_indexing_full);plot(time_direct_indexing_part)
legend('Full Time Logic','Part Time Logic','Full Time Direct','Part Time Direct')
function time=complex_stuff(input,max_val)
tic
if ~exist('max_val','var')
mask=true(size(input));
else
mask=false(size(input));
mask(1:max_val)=true;
end
sin(input(mask).^2/4356.342).^63/345;
time=toc;
function time=complex_stuff2(input,max_val)
tic
if ~exist('max_val','var')
max_val=length(input);
end
sin(input(1:max_val).^2/4356.342).^63/345;
time=toc;
अपने 'IDX' अपने' points.x' में पदों का प्रतिनिधित्व पूर्णांकों से बना है या यह एक तार्किक सरणी है? – foglerit
वे 'ढूंढें' के बजाय 'ढूंढें (मानदंड)' फ़ंक्शन – zamazalotta
से वापस लौटे गए स्थिति पूर्णांक हैं, 'IDX = points.x == मानदंड' (या जो भी अन्य तर्क परिभाषित' आईडीएक्स') आज़माएं। इस तरह आप एक लॉजिकल सरणी तैयार करेंगे, जिसके परिणामस्वरूप कई मामलों में तेजी से अनुक्रमण – foglerit