2017-10-24 41 views
6

मैं या शामिल करना चाहते हैं (या किसी भी) एक समारोह जहां तर्क (तार्किक वैक्टर) की संख्या में पारित दो से अधिक हो सकता है के भीतर और संख्या में भिन्न हो सकते हैं। उदाहरण के लिए, माता-पिता समारोहदो से अधिक वैक्टर के लिए आवेदन "या" समारोह मैटलैब

a=[1;0;0;0] 
b=[0;1;0;0] 
c=[0;0;0;1] 

बना सकते हैं, लेकिन अगली बार

d=[0;0;1;0] 

मैं इसे कैसे मिलता है, इस मामले में, मुझे देने के लिए एक्स = [1 जोड़ सकते हैं; 1; 0 ; 1] पहली बार और वाई = [1; 1; 1; 1] दूसरी बार? वैक्टर की संख्या बीस से ऊपर हो सकता है तो यह पहचान करने के लिए कितने वैक्टर में पारित किया जा रहा है सक्षम होने के लिए की आवश्यकता होगी

उत्तर

9

यह मैं इसे कैसे करना होगा है।

function y = f(varargin) 
y = any([varargin{:}], 2); 

varargin एक सेल सरणी है फ़ंक्शन इनपुट तर्क के साथ। {:} उन तर्कों के comma-separated list उत्पन्न करता है, और [...] (या horzcat) उन्हें क्षैतिज रूप से जोड़ता है। तो अब हमारे पास एक कॉलम में प्रत्येक वेक्टर के साथ एक मैट्रिक्स है। दूसरे आयाम के साथ any लागू करना वांछित परिणाम देता है।

के बाद से समारोह एक सिंगल स्टेटमेंट शामिल आप भी एक anonymous function के रूप में यह परिभाषित कर सकते हैं:

f = @(varargin) any([varargin{:}], 2); 

उदाहरण चलाता है:

>> f([1; 1; 0; 0], [1; 0; 0; 1]) 
ans = 
    4×1 logical array 
    1 
    1 
    0 
    1 

>> f([1; 1; 0; 0], [1; 0; 0; 1], [0; 0; 1; 0]) 
ans = 
    4×1 logical array 
    1 
    1 
    1 
    1 
2

मुझे यकीन है कि आप पहले से ही इस बारे में सोचा कर रहा हूँ:

a=[1;0;0;0] 
b=[0;1;0;0] 
c=[0;0;0;1] 
a|b|c % returns [1;1;0;1] 

हालांकि इसके लिए एक बहुत आसान जवाब है:

any([a,b,c,d],2); 

any फ़ंक्शन में इनपुट करने से पहले, उपर्युक्त चरों को आसानी से संयोजित करके आसानी से विस्तार योग्य। यदि आप इसे किसी फ़ंक्शन में रखना चाहते हैं तो इसे करने का तरीका:

function customOr(varargin) 
    any(cell2mat(varargin),2) % equivalent to any([varargin{:}],2); 
end 
customOr(a,b,c) % returns [1;1;0;1] 
customOr(a,b,c,d) % returns [1;1;1;1] 
संबंधित मुद्दे