按矢量按每个值出现的时间排序

时间:2012-11-21 18:29:35

标签: matlab sorting

我们有以下案例:

    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

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

等待结果应该是:

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

提前谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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