输入矩阵:
1.0000 0 0.2173 0.2585 0.3764
0 0 0 0 0
0.2173 0 0.2173 0.2173 0.2173
0.2585 0 0.2173 0.2585 0.2585
0.3764 0 0.2173 0.2585 0.3764
预期输出矩阵:
5 1 2 3 4
1 1 1 1 1
2 1 2 2 2
3 1 2 3 3
4 1 2 3 4
对于给定的矩阵 R={r(i,j)},以下是对输入矩阵进行的 2 次操作:
1.我们按升序排列对角线值。(即,对于小值,排名 1,对于下一个小值,排名 2,依此类推)
ex:
0-1st rank
0.2173-2nd rank
0.2585-3rd rank
0.3764-4th rank
1.0000-5th rank
2.除了对角单元格之外,我们根据对角线值对剩余值进行排序。(即对角线值排名赋予其他矩阵值)
ex:For 1st row For 2nd row For 3rd row For 4th row For 5th row
0-1st rank 0-1st rank 0-1st rank 0-1st rank 0-1st rank
0.2173-2nd rank 0-1st rank 0.2173-2nd rank 0.2173-2nd rank 0.2173-2nd rank
0.2585-3rd rank 0-1st rank 0.2173-2nd rank 0.2585-3rd rank 0.2585-3rd rank
0.3764-4th rank 0-1st rank 0.2173-2nd rank 0.2585-3rd rank 0.3764-4th rank
我试过的源代码:
out = zeros(size(table1));
for k = 1:5
[~,ind2] = sort(table1(k,:));
ind2(ind2)=1:5;
out(k,:) = ind2;
end
out = out-bsxfun(@gt,out,diag(out));
%%// Take care of assigning diagonal elements
[~,ind1] = sort(diag(table1));
ind1(ind1)=1:5;
out(1:size(out,1)+1:end)=ind1;
C=out
我得到的输出矩阵:
5 1 2 3 4
1 1 2 3 4
2 1 2 3 4
3 1 2 3 4
4 1 2 3 4