2013-07-18 8 views
11

उदाहरण के लिए, ए संख्या set.b तत्व है।क्या कोई कार्य है "ismember" लेकिन अधिक कुशल?

मैं परीक्षण करने के लिए ख में संख्या सेट ए

के तत्व मैं matlab समारोह "ismember" ऐसा कर सकता है पता है कि क्या चाहते हैं, लेकिन यह जब मैं इसे एक लाख बार उपयोग काफी तेजी से नहीं है।

b=[1,2,9,100]; 
A=[1,2,3,4,5,6,7,8,9]; 
tic;for ii=1:1e6,ismember(b,A);end;toc 
Elapsed time is 45.714583 seconds. 

मैं, क्योंकि 1,2,9 सेट एक में हैं, [1,1,1,0] वापस जाने के लिए है, जबकि 100 नहीं है चाहता हूँ।

क्या आप कुछ ऐसे कार्यों जैसे कि "सदस्य" से अधिक कुशल या कुछ तरीकों से जानते हैं?

+0

तुम सच में यह 1 लाख बार क्रमिक रूप से उपयोग करने के लिए की जरूरत है? –

+0

@ डेनिस जाहरुद्दीन मैं दक्षता का परीक्षण करने के लिए इसे दस लाख बार चलाता हूं, वास्तव में इसे दस लाख बार नहीं चलाना चाहता हूं। – lihaitao

उत्तर

14

आप मेक्सिको संस्करण का उपयोग कर सकते हैं, यानी ismemberoneoutput। मेक्सिको संस्करण बहुत तेज़ है।

b=[1,2,9,100]; 
A=[1,2,3,4,5,6,7,8,9]; 
tic;for ii=1:1e5,ismember(b,A);end;toc 
%Elapsed time is 9.537219 seconds. On my pc 

% A must be sorted!!! In this example it is already sorted, 
% so no need for this here. 
tic;for ii=1:1e5,builtin('_ismemberoneoutput',b,A);end;toc 
%Elapsed time is 0.376556 seconds. On my pc 
+1

बहुत बहुत धन्यवाद! वैसे, "_ismemberoneoutput" कहां है? "_ismemberoneoutput संपादित करें" फ़ंक्शन नहीं मिला। आप फ़ंक्शन को कैसे जानते हैं? यह कहां है? – lihaitao

+0

@lihaitao matlab में इसकी buildin। आपके पास क्या संस्करण है? मैंने 2013 ए में इसका परीक्षण किया? – Marcin

+0

@ मार्किन मैं R2013a का उपयोग करता हूं। आप matlab में फ़ंक्शन कैसे जानते हैं? मैं matlab में builin फ़ंक्शंस कैसे सीख सकता हूं? – lihaitao

0

इस से बचने के लिए संभव नहीं हो सकता है, लेकिन एक कारण है कि अपने गणना इतनी धीमी गति से होता है, क्योंकि आप एक vectorized तरह से ismember फोन नहीं किया।

इस प्रयास करें, यह आसान है और तेजी से होता है:

bigb = repmat(b,1e6,1); 
ismember(bigb,A); 
+0

मैं दक्षता का परीक्षण करने के लिए इसे दस लाख बार चलाता हूं, वास्तव में इसे दस लाख बार नहीं चलाना चाहता हूं। – lihaitao

+0

@ लिहाताओ सच, इस्लाम जैसी शक्तिशाली शक्ति छोटे पैमाने के उदाहरणों के लिए बहुत ही कुशल नहीं है। लेकिन मेरा मुद्दा यह है कि जब तक कि आप इसे कई बार नहीं चलाते हैं, तब तक एक छोटी स्केल समस्या को हल करने में लगने वाला समय शायद दक्षता का सबसे प्रासंगिक उपाय नहीं है। –

संबंधित मुद्दे