朱莉娅的排序索引(相当于numpy的argsort)

问题描述 投票:6回答:2

哪个Julia的函数返回将对数组进行排序的索引? Python的Numpy使用argsort

julia
2个回答
16
投票
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]

但我觉得要解释它是如何运作的

我真的希望有人发布一个更好的方法,如果存在的话

© www.soinside.com 2019 - 2024. All rights reserved.