Matlab

2012-11-05 20 views
7

में निर्दिष्ट इंडेक्स में निकटतम अनुक्रमणिका कैसे खोजें I MATLAB, A और B. B में दो वैक्टर हैं जिनमें कुछ इंडेक्स (1 से अंत) हैं। मेरे पास एक यादृच्छिक अनुक्रमणिका है, आर (वेक्टर इंडेक्स की सीमा के भीतर)।Matlab

A = [2 3 6 1 9 7 4 5 8] 
B = [3 4 5 6 7 8] 
R = 5 

: मैं एक समारोह (या बयान) का चयन करने के लिए एक [z], जहां जेड सबसे निकटतम संख्या (यानी इंडेक्स) आर है कि बी में

उदाहरण शामिल नहीं है है लिखना चाहते हैं फ़ंक्शन को 3 वापस करना होगा, क्योंकि सबसे नज़दीकी सूचकांक 2 है, क्योंकि 5-2 < 9-5 और 2 बी में नहीं है, इसलिए ए [2] = 3;

धन्यवाद

उत्तर

0

कृपया ध्यान दें कि सेटडिफ और सेटक्सर फ़ंक्शंस परिणाम को सॉर्ट करते हैं।

tmpSet = R - setdiff(1:numel(A),B); 
[~,z] = min(abs(tmpSet)); 
z = tmpSet(z); 
Result = A(R-z); 

सवाल में एक ही उदाहरण:

A = [2 3 6 1 9 7 4 5 8] 
B = [3 4 5 6 7 8] 
R = 5 

tmpSet = 5 - {1 2 9} = {4 3 -4} 
z = 2 
z = 3 
Result = A(5-3) = A(2) = 3 

अपने विचारों के लिए धन्यवाद।

6

याकूब के जवाब में सुधार, यहाँ सही समाधान है:

[result, z] = min(abs(R - setxor(B, 1:numel(A)))) 

और अपने मामले में कि z = 2 और result = A(2) = 3 अर्जित करता है।

+1

आपकी मदद के लिए धन्यवाद। मुझे लगता है कि setxor के बजाय settdiff का उपयोग करना बेहतर है। मैंने आपका कोड निम्नलिखित में बदल दिया है। कृपया करके अपना सुझाव मुझे बताए। – remo

+0

मैं MATLAB 2012 का उपयोग कर रहा हूं। जैसा कि सेटक्सर प्रलेखन में कहा गया है, सेटक्सर (ए, बी) = ए-बी यूनियन बी-ए (सममित अंतर)। हालांकि, हमारे मामले में मुझे लगता है कि यह कोई फर्क नहीं पड़ता है, क्योंकि बी में सीमा में संख्याएं होती हैं। – remo

2

यदि मैं सही ढंग से समझता हूं, तो आप बी में उल्लिखित सूचकांक खोजने के लिए पहले बाहर निकल सकते हैं, यानी excl = A(setxor(B,1:length(A)))। फिर इस excl(min(abs(R-excl))) की तरह मिनट प्राप्त करना आसान है।

+0

'setxor' निश्चित रूप से सही दिशा है, लेकिन परिणाम गलत है। 'excl' में' ए 'के सूचकांक होने चाहिए, न कि इसके मान। –