2016-09-26 79 views

回答

15
julia> r = rand(0:9, 5) 
5-element Array{Int64,1}: 
5 
0 
6 
1 
1 

julia> i = sortperm(r) 
5-element Array{Int64,1}: 
2 
4 
5 
1 
3 

julia> r[i] 
5-element Array{Int64,1}: 
0 
1 
1 
5 
6 
1

我不是100%我理解的问题,但我怀疑你问的是,如果你有矢量

a = [4,8,2] 

你想获得

order = [2,3,1] 

如果这就是你需要的,我所做的是我使用sortcols,这是一个怪胎解决方法

如果你有一个载体,

a = [5,2,8,4,3,1] 

您创建一个新的

b = hcat(a, 1:length(a)) 

5 1 
2 2 
8 3 
4 4 
3 5 
1 6 

然后调用

c = sortrows(b, by = x -> x[1]) 

1 6 
2 2 
3 5 
4 4 
5 1 
8 3 

现在C [:2]将后者列

6 
2 
5 
4 
1 
3 

当然,这可以都是压缩成

sortrows(hcat(a, 1:length(a)), by = x -> x[1])[:,2] 

,但我觉得解释它是如何工作

我真的希望有人张贴一个更好的方式来做到这一点,如果存在