performance - Efficient alternative for "ismember" function for arrays - MATLAB -


यदि 2D में अंक की एक श्रृंखला समन्वयित है, उदाहरण के लिए:

< & gt;> <कोड> & gt पूर्व; ए = [1 2; 3 4; 5 6; 7 8; 9 0]; ए = 1 2 3 4 5 6 7 8 9 0

और बी दो कोशिकाओं में शामिल हैं जो प्रत्येक कक्ष 'ए' का एक भाग है और केवल < कोड> एक्स मान (प्रथम स्तंभ), इसका मतलब है:

  & gt; & gt; बी = {[3; 7]; [5]} बी = [2x1 डबल] [5]  

मैं B कोशिकाओं को A < / कोड> और उन बिंदुओं के निर्देशांक दे।

यह मेरा कोड है जो डेटा के बड़े सेट के लिए बहुत धीमा है:

  C = cell (लंबाई (B ), 1) मैं = 1 के लिए: लंबाई (बी) सी {i} = A (मेम्बर (ए (,, 1), बी {i}, 'पंक्तियाँ'), :);  

सी सही उत्तर है और 2 कोशिकाओं को शामिल करें जो कि बी के प्रत्येक कक्ष के निर्देशांक हैं:

  सी = [2x2 डबल] [1x2 डबल]> gt; & gt; सी {1} ans = 3 4 7 8  

और

  & gt; & gt; सी {2} ans = 5 6  

दोबारा, हालांकि सी सही उत्तर है, मैं एक अधिक कुशल समाधान की तलाश कर रहा हूं शायद सेलफ़न ?

आपको ' पंक्तियाँ ' के साथ ismember वहां। तो, आप बस ऐसा कर सकते हैं -

  के लिए k = 1: numel (b) c {i} = a (ismember (a (,, 1), b {k}), :) ;  

यह निश्चित नहीं है कि अगर यह आपके समाधान को गति देगा।


दूसरा दृष्टिकोण के रूप में और यह तेज़ हो सकता है (हालांकि परीक्षण नहीं किया गया), आप उपयोग कर सकते हैं bsxfun -

  के लिए k = 1: numel (B) सी {k} = A (कोई भी (bsxfun (@ eq, ए (:, 1), बी {कश्मीर} '), 2), :)।  

बेशक, किसी भी दृष्टिकोण का उपयोग करने से पहले पूर्व-आवंटित के साथ -

  C = cell (numel) (बी), 1)  

Comments

Popular posts from this blog

HTML/CSS - Automatically set height width from background image? -

php - Mysql Show Process - Sleep Commands and what to do -

c - What is the address of buf (the local variable in the main function)? -