我想在Matlab中對矢量的元素進行排序(排序),並且具有相同值的元素具有相同的排名(按降序排列)。所以,我想這樣一個例行的:向量中的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個或更多,如我的例子,它不起作用。我該如何處理任意數量的重複項?
非常感謝@丹,噸帽子很棒 – MeSS83