2012-12-03 13 views
9
H0 is an array [1:10] 
H is a single number [5] 

में बयान कैसे एकल नंबर एच साथ H0 में हर तत्व की तुलना करने के इतनाकैसे के लिए एक नंबर करने के सरणी तुलना करने के लिए करता है, तो matlab

if H0>H 
do something, 
else do another thing, 
end 

मैटलैब हमेशा अन्य काम करते हैं।

उत्तर

8

if को निम्न प्रश्नों को एक स्केलर सत्य/गलत के मूल्यांकन के लिए आवश्यक है। यदि कथन एक सरणी है, तो व्यवहार all(..) में इसे लपेटने के बराबर है। आप if -statement के माध्यम से test पारित करने के लिए दो विकल्प हैं

तो एक तार्किक सरणी में अपनी तुलना परिणाम, इस तरह के रूप में

H0 = 1:10; 
H = 5; 
test = H0>H; 

:

(1) आप test के उत्पादन में समेकित कर सकते हैं, उदाहरण के लिए आप any या alltest में तत्वों के सही होने पर if-clause निष्पादित करना चाहते हैं, उदाहरण के लिए,

if any(test) 
    do something 
end 

(2) आप test के तत्वों के माध्यम से पुनरावृति, और तदनुसार प्रतिक्रिया

for ii = 1:length(test) 
    if test(ii) 
     do something 
    end 
end 

ध्यान दें कि यह सूचकांक के रूप में तार्किक वेक्टर test का उपयोग करके इस आपरेशन vectorize करने के लिए संभव हो सकता है। ismemeber() फ़ंक्शन का उपयोग:

संपादित

, तो के रूप में एक टिप्पणी में संकेत दिया है, तो आप P(i)=H0(i)^3 if H0(i)<H चाहते हैं, और अन्यथा P(i)=H0(i)^2, तो आप बस

P = H0 .^ (H0<H + 2) 
+0

मैं 'के लिए' का इस्तेमाल किया लेकिन वहाँ ii = 1 के लिए एक समस्या था: लंबाई (परीक्षण) अगर परीक्षण (ii) पी = H0 अंत अंत क्योंकि H0 एक 10 नंबर की एक सरणी मैं 10 मिल गया है * पी के 10 मान केवल 10 मुझे पता है कि मैं बहुत शुरुआती हूं लेकिन किसी भी तरह से आपको धन्यवाद – Nawar

+0

@ नवर: आपको ठीक से इंडेक्स करना होगा, उदाहरण के लिए 'पी (ii) = H0 (ii) '। हालांकि, अगर आप अन्य टिप्पणी में उल्लिखित फ़ंक्शन को लागू करना चाहते हैं, तो मेरा संपादन आपको इसे एक साधारण पंक्ति में करने की अनुमति देगा। – Jonas

+0

+1 जोनास यह कुशल और बहुत बेहतर है। – bonCodigo

1

वैसे भी इस पर एक नज़र डालें लिखें। स्पष्ट रूप से सुनिश्चित नहीं है कि आप तुलना करने की अपेक्षा कैसे करते हैं। सदस्य के रूप में या तो छोटे, बराबर या भीतर से अधिक। तो मेरा जवाब अभी तक आपको संतुष्ट नहीं कर सकता है। लेकिन वैसे भी आपको एक विचार दे रहा है।

H0 = [0 2 4 6 8 10 12 14 16 18 20]; 
H = [10]; 
ismember(H,H0) 
IF (ans = 1) then 
// true 
else 
//false 
end 

अद्यतन उत्तर

यह सुपर bruteforce विधि है - बस उसे समझाने का उपयोग करें। जो कुछ मैं प्रस्तुत करता हूं उससे यहां दिए गए किसी अन्य उत्तर के साथ आप बेहतर हैं। आदर्श रूप में क्या आप की जरूरत ^3 प्रसंस्करण के साथ दो अलग अलग वैक्टर में अधिक से अधिक/कम मूल्यों बंद चीर करने के लिए है - मुझे लगता है ... :)

H0 = [0 2 4 6 8 10 12 14 16 18 20]; 
H = [10]; 

H0(:) 
ans = 
    0 
    2 
    4 
    6 
    8 
    10 
    12 
    14 
    16 
    18 
    20 

समारोह find रिटर्न एक रेखीय में H0 अधिक से अधिक 10 से मूल्यों में सभी मानों का सूचकांक सूचकांक।

X = find(H0>H) 
X = 
    7 
    8 
    9 
    10 
    11 

समारोह find रिटर्न एक रेखीय सूचकांक में 10 की तुलना में कम H0 में सभी मूल्यों के सूचकांकों।

Y = find(H0<H) 
Y = 
    1 
    2 
    3 
    4 
    5 
    6 

क्या आप अधिक से अधिक/कम मूल्यों की जाँच करने के लिए H0 के प्रत्येक तत्व का उपयोग कर सकते चाहते हैं या आप अंकगणितीय आपरेशनों के साथ दो अलग अलग विन्यास में, H0 बंद मूल्यों चीर करने के लिए सूचकांक के साथ ऊपर मैट्रिक्स का उपयोग कर सकते हैं।

G = zeros(size(X)); // matrix with the size = number of values greater than H 
J = zeros(size(Y)); // matrix with the size = number of values lower than H 

for i = 1:numel(X) 
    G(i) = H0(X(i)).^3 
end 

G(:) 
ans = 

     1728 
     2744 
     4096 
     5832 
     8000 

for i = 1:numel(Y) 
    J(i) = H0(Y(i)).^2 
end 

J(:) 
ans = 

     0 
     4 
    16 
    36 
    64 
    100 
+0

मैं सरणी पर हर तत्व की तुलना करना चाहता हूं संख्या से कम या अन्यथा यदि एच 0 <एच पी = एच 0^3, अन्य पी = एच 0^2 – Nawar

1

@ जोनास के आखिरी पंक्ति में अच्छे जवाब ने मुझे लॉजिकल इंडेक्सिंग का उपयोग करके एक संस्करण के साथ आने के लिए प्रेरित किया।

for i=1:N 
    if H0(i)>H 
    H0(i)=H0(i)^2; 
    else 
    H0(i)=H0(i)^3; 
    end 
end 

के बजाय आप इस

P = zeros(size(H0)); % preallocate output 
test = H0>H; 

P(test) = H0(test).^2; % element-wise operations 
         % on the elements for which the test is true 

P(~test) = H0(~test).^3; % element-wise operations 
         % on the elements for which the test is false 

ध्यान दें कि यह एक सामान्य समाधान है कर सकते हैं।

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