2010-03-24 8 views
13

मेरे पास एक एन-बाय-एम आयताकार मैट्रिक्स (एन! = एम) है। MATLAB में इसमें कोई डुप्लिकेट पंक्तियां हैं या नहीं, यह जानने का सबसे अच्छा तरीका क्या है? डुप्लीकेट के सूचकांक को खोजने का सबसे अच्छा तरीका क्या है? मैट्रिक्स की पंक्तियां के माध्यम सेमैं कैसे बता सकता हूं कि आयताकार मैट्रिक्स में MATLAB में डुप्लिकेट पंक्तियां हैं या नहीं?

उत्तर

17

उपयोग अद्वितीय() अलग पंक्ति मूल्यों को खोजने के। यदि आप कम पंक्तियों के साथ समाप्त होते हैं, तो डुप्लिकेट होते हैं। यह आपको प्रत्येक विशिष्ट मानों के एक स्थान की अनुक्रमणिका भी देगा। अन्य सभी पंक्ति अनुक्रमणिका आपके डुप्लिकेट हैं।

x = [ 
    1 1 
    2 2 
    3 3 
    4 4 
    2 2 
    3 3 
    3 3 
    ]; 
[u,I,J] = unique(x, 'rows', 'first') 
hasDuplicates = size(u,1) < size(x,1) 
ixDupRows = setdiff(1:size(x,1), I) 
dupRowValues = x(ixDupRows,:) 
+0

+1: डांग, मुझे 49 सेकंड से हराया! – gnovice

+0

क्या किसी को एल्गोरिदम Matlab इस गणना करने के लिए उपयोग करता है पता है? – Will

0

भागो, और प्रत्येक जोड़ी के लिए, परीक्षण करता है, तो

row1 == row2

+1

यह काम करता है, लेकिन निश्चित रूप से अन्य मूल विकल्प (यानी 'अद्वितीय()' का उपयोग करके धीमे और अधिक क्रियात्मक दोनों) है। – bnaul

4

आप UNIQUE और SETDIFF यह पूरा करने के कार्यों का उपयोग कर सकते हैं:

>> mat = [1 2 3; 4 5 6; 7 8 9; 7 8 9; 1 2 3]; %# Sample matrix 
>> [newmat,index] = unique(mat,'rows','first'); %# Finds indices of unique rows 
>> repeatedIndex = setdiff(1:size(mat,1),index) %# Finds indices of repeats 

repeatedIndex = 

    4  5 
+0

'बार-बार' इंडेक्स '' 3,4] 'नहीं होना चाहिए? – AVB

+0

@AB: नहीं, 'mat 'की चौथी और पांचवी पंक्तियां पहले पंक्तियों की दोहराई जाती हैं। – gnovice

0

मान लें कि आपका मैट्रिक्स एम है:

[S,idx1] = sortrows(M); 
idx2 = find(all(diff(S,1) == 0,2)); 
out = unique(idx1([idx2;idx2+1])); 

बाहर यदि कोई हो डुप्लिकेट पंक्ति सूचियों में शामिल होंगे।

+0

यह केवल तभी काम करेगा जब आपकी डुप्लिकेट पंक्तियां एक-दूसरे के बगल में हों। – gnovice

+0

मेरी गलती। गलत धारणा ... – upperBound

+0

खैर, तकनीकी रूप से ओपी कभी * स्पष्ट रूप से * ने कहा कि डुप्लीकेट पंक्तियां एक दूसरे के पीछे नहीं हैं या नहीं। यद्यपि यूनिक का उपयोग करने के रूप में सामान्य नहीं है, यह समाधान * पड़ोसी डुप्लीकेट के विशिष्ट मामले में * तेजी से * तेज चलता है, इसलिए +1। – gnovice