Chciałbym szeregować (porządkować) elementy wektora w Matlab i aby elementy o tej samej wartości miały tę samą wartość (w porządku malejącym). Więc chciałbym rutynowe, takie jak:Wartości rang Matlaba w wektorze z powtarzanymi wielokrotnie elementami
>> Rank = ComputeRanking([ 5 10 5 5 1])
Rank =
2 1 2 2 5
znalazłem częściowe rozwiązanie na miejscu 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
To działa, jeśli istnieje jeden duplikat (2 elementy o tej samej wartości) ale jeśli są 2 lub więcej, jak w moim przykładzie, to nie działa. Jak mogę zrobić, aby obsłużyć dowolną liczbę duplikatów?
Wielkie dzięki @Dan, t czapka działa świetnie – MeSS83