2011-01-24 44 views
5

Tôi đang tìm một hàm để tìm các hàng lặp lại nhiều nhất (tức là phương thức) của ma trận trong MATLAB. Một cái gì đó như:Tìm hàng lặp lại nhiều nhất trong ma trận MATLAB

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

A = 

0  1 
2  3 
0  1 
3  4 

Sau đó chạy:

>> mode(A, 'rows') 

sẽ trở [0, 1], lý tưởng với một đầu ra thứ hai đưa ra các chỉ số nơi hàng này xảy ra (ví dụ [1, 3]'.)

Có ai biết như vậy một chức năng?

Trả lời

13

Bạn có thể sử dụng UNIQUE để nhận chỉ mục hàng duy nhất và sau đó gọi MODE trên chúng.

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

Cảm ơn. Tôi nghĩ rằng dòng cuối cùng nên là một cái gì đó như: 'whereIdx = find (uIdx (modeIdx) == uIdx)' mặc dù. –

+0

@Bill Cheatham: Vâng, tất nhiên rồi. Đó là những gì tôi nhận được để thêm một dòng * sau * thử nghiệm. – Jonas

+2

điều này có thể không đúng. Thử A = [2, 3; 0, 1; 3, 4; 0, 1] – sinoTrinity

2

Câu trả lời có thể không đúng. Thử A = [2, 3; 0, 1; 3, 4; 0, 1]. Cần có các thông tin sau:

[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 
Các vấn đề liên quan