मेरे पास एक एन-बाय-एम आयताकार मैट्रिक्स (एन! = एम) है। MATLAB में इसमें कोई डुप्लिकेट पंक्तियां हैं या नहीं, यह जानने का सबसे अच्छा तरीका क्या है? डुप्लीकेट के सूचकांक को खोजने का सबसे अच्छा तरीका क्या है? मैट्रिक्स की पंक्तियां के माध्यम सेमैं कैसे बता सकता हूं कि आयताकार मैट्रिक्स में MATLAB में डुप्लिकेट पंक्तियां हैं या नहीं?
उत्तर
उपयोग अद्वितीय() अलग पंक्ति मूल्यों को खोजने के। यदि आप कम पंक्तियों के साथ समाप्त होते हैं, तो डुप्लिकेट होते हैं। यह आपको प्रत्येक विशिष्ट मानों के एक स्थान की अनुक्रमणिका भी देगा। अन्य सभी पंक्ति अनुक्रमणिका आपके डुप्लिकेट हैं।
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,:)
भागो, और प्रत्येक जोड़ी के लिए, परीक्षण करता है, तो
row1 == row2
यह काम करता है, लेकिन निश्चित रूप से अन्य मूल विकल्प (यानी 'अद्वितीय()' का उपयोग करके धीमे और अधिक क्रियात्मक दोनों) है। – bnaul
आप 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
मान लें कि आपका मैट्रिक्स एम है:
[S,idx1] = sortrows(M);
idx2 = find(all(diff(S,1) == 0,2));
out = unique(idx1([idx2;idx2+1]));
बाहर यदि कोई हो डुप्लिकेट पंक्ति सूचियों में शामिल होंगे।
यह केवल तभी काम करेगा जब आपकी डुप्लिकेट पंक्तियां एक-दूसरे के बगल में हों। – gnovice
मेरी गलती। गलत धारणा ... – upperBound
खैर, तकनीकी रूप से ओपी कभी * स्पष्ट रूप से * ने कहा कि डुप्लीकेट पंक्तियां एक दूसरे के पीछे नहीं हैं या नहीं। यद्यपि यूनिक का उपयोग करने के रूप में सामान्य नहीं है, यह समाधान * पड़ोसी डुप्लीकेट के विशिष्ट मामले में * तेजी से * तेज चलता है, इसलिए +1। – gnovice
+1: डांग, मुझे 49 सेकंड से हराया! – gnovice
क्या किसी को एल्गोरिदम Matlab इस गणना करने के लिए उपयोग करता है पता है? – Will