4

我们有以下案例:

    Q = [idxcell{:,1}];     
    Sort = sort(Q,'descend')                                                                                                                       
    Sort =
          Columns 1 through 13
            23    23    22    22    20    19    18    18    18    18    17    17    17
          Columns 14 through 26
            15    15    14    14    13    13    13    12    12    12    11    10     9
          Columns 27 through 39
             9     9     8     8     8     8     8     7     7     7     7     7     7
          Columns 40 through 52
             7     6     6     6     5     4     4     3     3     3     3     2     2
          Columns 53 through 64
             2     2     2     2     2     2     2     1     1     1     1     1

我们如何根据其值重复的次数对矩阵 Sort 进行排序?

等待结果应该是:

repeatedSort =  2(9) 7(7) 1(5) 8(5) 3(4) 18(4) 6(3) 9(3) 12(3) 13(3) 17(3) 4(2) 14(2) 15(2) 22(2) 23(2) 5(1) 10(1) 11(1) 19(1) 20(1)
      or 
repeatedSort = 2 7 1 8 3 18 6 9 12 13 17 4 14 15 22 23 5 10 11 19 20

先感谢您。

4

2 回答 2

4

您可以使用统计工具箱中的TABULATE函数,然后调用SORTROWS按频率排序。

例子:

x = randi(10, [20 1]);    %# random values
t = tabulate(x);          %# unique values and counts
t = t(find(t(:,2)),1:2);  %# get rid of entries with zero count
t = sortrows(t, -2)       %# sort according to frequency

结果,其中第一列是唯一值,第二列是它们的计数:

t =
     2     4     %# value 2 appeared four times
     5     4     %# etc...
     1     3
     8     3
     7     2
     9     2
     4     1
     6     1
于 2012-11-21T22:37:24.840 回答
3

这是一种方法:

d      = randi(10,1,30); %Some fake data
n      = histc(d,1:10);
[y,ii] = sort(n,'descend');

disp(ii) % ii is now sorted according to frequency
于 2012-11-21T18:49:31.003 回答