performance - Efficient alternative for "ismember" function for arrays - MATLAB -
यदि ए 2D में अंक की एक श्रृंखला समन्वयित है, उदाहरण के लिए:
और बी दो कोशिकाओं में शामिल हैं जो प्रत्येक कक्ष 'ए' का एक भाग है और केवल < कोड> एक्स मान (प्रथम स्तंभ), इसका मतलब है:
& 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
Post a Comment