使用重复对值进行排名。 MATLAB

时间:2013-05-29 06:06:10

标签: matlab rank

我的问题很简单,但我找不到答案......

我有一个100,000行x 30 colums矩阵用于模拟,我需要对每列的100k值进行排序。 我正在寻找类似于tiedrank的东西,但我需要重复计算(而不是平均值)。

假设:data = [-1 2 0 -2 0]我需要的是rank= [2 5 3 1 4]

有什么建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您似乎需要sort

data = [-1 2 0 -2 0];
[ignore, idx] = sort( data );
rank( idx ) = 1:numel(idx)

rank =

    2     5     3     1     4

要将矩阵的所有列排序为一次,您可以使用以下代码

data = [ -1 2 0 -2 0; -1 -1 -2 2 2]' ; %'
[n m] = size( data ); % number of rows and columns
[ignore idx] = sort(data); % sort columns
rank = zeros( size(data) ); % allocate
rank( sub2ind( size(rank), idx, bsxfun(@times, 1:m, ones(n,1) ) ) ) = ...
    repmat( (1:n)', 1, m )

rank =

     2     2
     5     3
     3     1
     1     4
     4     5