输入矩阵:
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.除对角线单元格外,我们根据对角线值对其余值rowise进行排序。(即对角线值等级赋予其他矩阵值)
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
假设所有值都在对角线中...您要做的就是用正整数替换所有值,同时保持数字的顺序...
unique的第三个输出将给出一个列向量,该列向量包含A中的所有值,但将最小值替换为1,将最小值替换为2,依此类推...然后可以将其重塑为大小为A的矩阵
[~,~,temp]=unique(A);
out=reshape(temp,size(A))
out =
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句