2

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

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

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

有什么建议吗?

非常感谢!

胡安

4

1 回答 1

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
于 2013-05-29T06:11:25.030 回答