क्या मैट्रिक्स में कोई निश्चित मान है या नहीं, यह पता लगाने के लिए MATLAB फ़ंक्शन में कोई बनाया गया है? (आला PHP के in_array()
)'मैट्रिक्स के लिए फ़ंक्शन मान एक्स है?'
उत्तर
ऐसा करने के कई तरीके। इस्मेम्बर सबसे पहले दिमाग में आता है, क्योंकि यह एक निर्धारित सदस्यता कार्रवाई है जिसे आप लेना चाहते हैं। इस प्रकार
X = primes(20);
ismember([15 17],X)
ans =
0 1
चूंकि 15 प्रमुख नहीं है, लेकिन 17 है, इसनेम्बर ने यहां अपना काम किया है।
बेशक, ढूंढें (या कोई भी) काम करेगा। लेकिन ये इस अर्थ में वेक्टरकृत नहीं हैं कि यह था। हम यह देखने के लिए परीक्षण कर सकते हैं कि 15 एक्स द्वारा निर्धारित सेट में है, लेकिन उन दोनों संख्याओं का परीक्षण करने के लिए लूप, या लगातार परीक्षण होंगे।
~isempty(find(X == 15))
~isempty(find(X == 17))
या,
any(X == 15)
any(X == 17)
अंत में, मैं कहना है कि सटीक मूल्यों के लिए परीक्षण खतरनाक होते हैं यदि संख्या सच तैरता हो सकता है। जैसा कि मैंने दिखाया है पूर्णांक मानों के खिलाफ टेस्ट आसान हैं। लेकिन फ्लोटिंग पॉइंट नंबरों के खिलाफ परीक्षण आमतौर पर सहिष्णुता को नियोजित करना चाहिए।
tol = 10*eps;
any(abs(X - 3.1415926535897932384) <= tol)
तीनों में से सबसे तेज़ 'कोई' लगता है। लेकिन आप इसे स्वयं मापना चाहते हैं ('टिक 'और' toc' का उपयोग करके)। – Lewistrick
फ़्लोटिंग पॉइंट मानों के लिए, यदि आप कम से कम R2015a का उपयोग कर रहे हैं, तो बस ['ismembertol'] (http://stackoverflow.com/a/28907857/2778484) का उपयोग करें। – chappjc
आप कर सकते हैं:
A = randi(10, [3 4]); %# a random matrix
any(A(:)==5) %# does A contain 5?
एक vectorized रास्ता, उपयोग में ऊपर करने के लिए:
any(bsxfun(@eq, A(:), [5 7 11])
या @woodchips के रूप में पता चलता है:
ismember([5 7 11], A)
आप [5 7 11] का उपयोग क्यों कर रहे हैं – Jordan
@ जोर्डन में तर्क के रूप में: उत्तर लौटाया गया तर्क तर्क के समान आकार का एक तार्किक सरणी (सत्य/गलत) है, यह दर्शाता है कि क्या मैट्रिक्स 'ए' में से प्रत्येक में शामिल है मान (जैसे '[सत्य, सत्य, गलत] 'जिसका अर्थ है' ए 'में मान' 5' और '7' है लेकिन' 11' नहीं)। – Amro
अब मुझे मिल गया, धन्यवाद – Jordan
आप क्या एक वेक्टर के तत्वों को किसी अन्य रूप में कर रहे हैं, सबसे अच्छा समाधान के रूप में अन्य उत्तर में बताया गया ismember
है की जाँच करने की जरूरत है।
ismember([15 17],primes(20))
लेकिन जब आप चल बिन्दु संख्या के साथ काम कर रहे हैं, या बस पास मैचों करना चाहते हैं (+ - 1000 भी संभव है), सबसे अच्छा समाधान मैंने पाया काफी कुशल File Exchange Submission: ismemberf
है यह देता है एक बहुत ही व्यावहारिक उदाहरण:
[tf, loc]=ismember(0.3, 0:0.1:1) % returns false
[tf, loc]=ismemberf(0.3, 0:0.1:1) % returns true
हालांकि डिफ़ॉल्ट सहिष्णुता सामान्य रूप से पर्याप्त होना चाहिए, यह आपको अधिक विकल्प प्रदान
ismemberf(9.99, 0:10:100) % returns false
ismemberf(9.99, 0:10:100,'tol',0.05) % returns true
फ़्लोटिंग पॉइंट डेटा के लिए, आप नए ismembertol
function का उपयोग कर सकते हैं, जो निर्दिष्ट सहिष्णुता के साथ सदस्यता सेट की गणना करता है। यह फ़ाइल एक्सचेंज में पाए गए ismemberf
फ़ंक्शन के समान है, सिवाय इसके कि यह अब MATLAB में अंतर्निहित है। उदाहरण:
>> pi_estimate = 3.14159;
>> abs(pi_estimate - pi)
ans =
5.3590e-08
>> tol = 1e-7;
>> ismembertol(pi,pi_estimate,tol)
ans =
1
फ़्लोटिंग पॉइंट डेटा के लिए जहां सहिष्णुता वांछित हो सकती है, ध्यान दें कि संस्करण R2015a ने एक अंतर्निहित फ़ंक्शन के साथ इसे संभालने के लिए नई कार्यक्षमता को जोड़ा है।पूर्णांक-मूल्यवान डेटा के लिए स्वीकृत समाधान बहुत अच्छे हैं, लेकिन फ्लोट के लिए, [इस उत्तर] पर जाएं (http://stackoverflow.com/a/28907857/2778484)। स्वयं पदोन्नति के लिए खेद है, लेकिन लोगों के पूछने के बाद MATLAB के लिए यह एक बड़ा जोड़ा है। – chappjc