【发布时间】:2015-11-11 11:07:26
【问题描述】:
我想在 Matlab 中对向量的元素进行排名(排序),并且具有相同值的元素具有相同的排名(按降序排列)。所以我想要一个例程,例如:
>> Rank = ComputeRanking([ 5 10 5 5 1])
Rank =
2 1 2 2 5
我在 mathworks 网站上找到了部分解决方案:ranking values:
function vecRank = ComputeRanking2(dataVector)
%
% Sort data in descending order with duplicates
%
[srt, idxSrt] = sort(dataVector,'descend');
% Find where are the repetitions
idxRepeat = [false; diff(srt) == 0];
% Rank with tieds but w/o skipping
rnkNoSkip = cumsum(~idxRepeat);
% Preallocate rank
vecRank = 1:numel(dataVector);
% Adjust for tieds (and skip)
vecRank (idxRepeat) = rnkNoSkip(idxRepeat);
% Sort back
vecRank (idxSrt) = vecRank ;
end
如果有一个重复项(2 个具有相同值的元素),则此方法有效,但如果有 2 个或更多,如我的示例所示,则它不起作用。如何处理任意数量的重复项?
【问题讨论】: