2011-01-24 11 views
5

में सबसे अधिक बार-बार पंक्ति खोजें I MATLAB में मैट्रिक्स की सबसे अधिक बार-बार (यानी मोडल) पंक्तियों को खोजने के लिए एक फ़ंक्शन ढूंढ रहा हूं। कुछ की तरह:MATLAB मैट्रिक्स

>> A = [0, 1; 2, 3; 0, 1; 3, 4] 

A = 

0  1 
2  3 
0  1 
3  4 

फिर चल:

>> mode(A, 'rows') 

आदर्श [0, 1] वापसी होगी, अनुक्रमित, जहां इस पंक्ति हुआ दे एक दूसरे उत्पादन के साथ (यानी [1, 3]'।)

किसी को भी इस तरह के पता है एक समारोह?

उत्तर

13

अद्वितीय पंक्ति सूचकांक प्राप्त करने के लिए आप UNIQUE का उपयोग कर सकते हैं, और फिर MODE पर कॉल कर सकते हैं।

[uA,~,uIdx] = unique(A,'rows'); 
modeIdx = mode(uIdx); 
modeRow = uA(modeIdx,:) %# the first output argument 
whereIdx = find(uIdx==modeIdx) %# the second output argument 
+1

धन्यवाद। मुझे लगता है कि आखिरी पंक्ति कुछ ऐसी होनी चाहिए: 'whereIdx = find (uIdx (modeIdx) == uIdx) हालांकि। –

+0

@ बिल चेथम: हां, ज़ाहिर है। * परीक्षण * के बाद मुझे एक पंक्ति जोड़ने के लिए यही मिलता है। – Jonas

+2

यह सही नहीं हो सकता है। ए = [2, 3; कोशिश करें; 0, 1; 3, 4; 0, 1] – sinoTrinity

2

उत्तर सही नहीं हो सकता है। ए = [2, 3; कोशिश करें; 0, 1; 3, 4; 0, 1]। यह निम्न होना चाहिए:

[a, b, uIdx] = unique(A,'rows'); 
modeIdx = mode(uIdx); 
modeRow = a(modeIdx,:) %# the first output argument 
whereIdx = find(ismember(A, modeRow, 'rows')) %# the second output argument