2010-08-12 10 views
6

दो मेट्रिसेस, ए और बी:MATLAB में सॉर्ट किए बिना ए से ए और बी के चौराहे को कैसे हटाया जाए?

A = [1 2 3 
    9 7 5 
    4 9 4 
    1 4 7] 

B = [1 2 3 
    1 4 7] 

मैट्रिक्स बी के सभी पंक्तियों मैट्रिक्स ए के सदस्यों मैं छँटाई के बिना एक से एक के आम पंक्तियों और बी को नष्ट करना चाहते हैं।

मैंने setdiff() की कोशिश की है लेकिन यह आउटपुट का प्रकार है।

पंक्तियों की आदेशित अखंडता को बनाए रखने के लिए मेरी विशेष समस्या (प्रोटीन संरचनाओं में परमाणु निर्देशांक) के लिए महत्वपूर्ण है।

उत्तर

10

उपयोग ISMEMBER:

%# find rows in A that are also in B 
commonRows = ismember(A,B,'rows'); 

%# remove those rows 
A(commonRows,:) = []; 
+3

मुझे 'याद रखें' प्यार है! मुझे हर जगह इसके लिए उपयोग मिलते हैं! – JudoWill

1

मैं डेटा छँटाई के बिना दो सरणियों के बीच अंतर पैदा करने के लिए किया था। मुझे matlab दस्तावेज़ों में यह शानदार विकल्प मिला। Setdiff function

यहां फ़ंक्शन [C,ia] = setdiff(___,setOrder) की परिभाषा है यदि आप नहीं चाहते हैं कि आउटपुट डेटा सॉर्ट किया गया हो तो अन्यथा 'सॉर्ट' या पैरामीटर के बिना।

यहां मेरा उपयोग केस था।

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable') 
yDataBefore = ScopeDataY; 
+0

आपके आसान समाधान के लिए धन्यवाद –

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