2016-05-08 1 views
0

Самый простой способ объяснить этот вопрос является примером:группы одинаковые строки матрицы, вместе с их частотой сосчитать

>> A = [1 5; 1 5; 1 6; 1 6; 1 6; 1 6; 1 7; 2 5; 2 6; 2 6; 2 6; 2 7; 2 7; 2 8] 

A = 

1  5 
1  5 
1  6 
1  6 
1  6 
1  6 
1  7 
2  5 
2  6 
2  6 
2  6 
2  7 
2  7 
2  8 

То, что я хочу, чтобы иметь выход нечто похожее на

result = 

    1  6  4 
    1  5  2 
    2  6  3 
    2  7  2 

Что означает верхние две частые пары для каждого значения в первом столбце. Таким образом, наиболее частые пары приходят с 1 - 6 и 5, а наиболее частые пары - с 2 - 6 и 7. 3-я колонка показывает частоту пар.

Я использую matlab 2016 в linux.

+0

даже намек может быть полезным – Woeitg

+0

Если я могу как-то рассмотреть первый и 2-й столбец как тот же объект, что будет легко решить, используя '' unique' и histc' функции. но я не знаю, как – Woeitg

ответ

3

Вы можете использовать unique и histc для подсчета частоты появления каждой строки. Затем, используя частоту, вы можете продолжить вычисления.

[unique_rows,~,ind] = unique(A,'rows'); 
counts = histc(ind,unique(ind)); 

Теперь вы можете комбинировать частоту и отсортировать ее.

arr = [unique_rows,counts]; 
[sorted,~]=sortrows(arr,[1 -3]) 

sorted = 

1  6  4 
1  5  2 
1  7  1 
2  6  3 
2  7  2 
2  5  1 
2  8  1