Имам 60x6
матрица X
, където колона 1 е индекс, а колони 2 до 6 са данни за този конкретен индекс. Бих искал да присвоя рангове на всяка стойност в колоните с данни, така че колони от 2 до 5 да са класирани в низходящ ред (най-високата стойност е класирана като 1, най-ниската стойност е класирана като 60), а колона 6 е класирана в низходящ ред (най-ниската стойност е класирана 1, най-високо класиран 60), но така че редът на редовете да се поддържа според индекса (колона 1). На връзките в ранга се присвоява ранг, равен на средната стойност на техните позиции във възходящ ред на стойностите.
Прегледах няколко предложения (тук, тук и тук) и изпробвах собствената си версия:
[~,Z1] = sort(X(:,2),'descend');
[~,Z2] = sort(X(:,3),'descend');
[~,Z3] = sort(X(:,4),'descend');
[~,Z4] = sort(X(:,5),'descend');
[~,Z5] = sort(X(:,6));
но никой не изглежда да работи така, както искам. Така че за
X =
1 0.9503 0.5646 0.3785 0.5468 -0.0161
2 0.9430 0.5728 0.3320 0.6693 -0.0161
3 0.5305 0.2719 0.1545 0.3480 0.0042
4 0.8588 0.5816 0.3429 0.6477 -0.0158
5 0.9391 0.5984 0.3362 0.6054 -0.0161
6 0.3780 0.2307 0.0906 0.3387 0.0054
нуждая се
Ans =
1 1 4 1 4 2
2 2 3 4 1 2
3 5 5 5 5 5
4 4 2 2 2 4
5 3 1 3 3 2
6 6 6 6 6 6