如何在排序数据后取消排序

时间:2016-10-21 14:20:32

标签: matlab

我试图在这里对数据进行排序后取回原始数据是代码,运行速度非常慢:

[Rs,iR] = sort(R,1);
for j = 1:length(Rs)
   for q = 1:length(iR)
     if(iR(q) == j)
         R_org(j,1) = Rs(iR(q));

     end
end

使用评论中显示的方法后,我的回答不一样:

K>> R = [8;2;7;9;10]

R =

     8
     2
     7
     9
    10

K>> [Rs,iR] = sort(R,1)

Rs =

     2
     7
     8
     9
    10


iR =

     2
     3
     1
     4
     5

K>> R_org = Rs(iR)

R_org =

     7
     8
     2
     9
    10

R和R_org不匹配

1 个答案:

答案 0 :(得分:2)

给出一个列表W,用fU = W(f)排序,找到g,使得W = U(g)W-f-> U-g-> W

解决方案:

[U, f] = sort(W);
[~, g] = sort(f);

(这里的“ ~”表示无所谓)