我的问题很简单,但我找不到答案...
我有一个 100,000 行 x 30 列的矩阵用于模拟,我需要对每列的 100k 值进行排名。我正在寻找类似的东西,tiedrank
但我需要重复次数(而不是平均值)。
假设:data = [-1 2 0 -2 0]
我需要的是rank= [2 5 3 1 4]
有什么建议吗?
非常感谢!
胡安
看来您需要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