Sak*_*.JJ 3 sorting matrix julia
我正在使用 Julia 1.6.1。
B是一个矩阵。例如,
B =
[ 2 4 4 4 5 ;
1 2 2 3 5 ;
1 2 3 3 3 ;
1 2 2 5 6 ;
1 3 4 4 4 ; ]
Run Code Online (Sandbox Code Playgroud)
我想对每一行进行强制排序。
sortedB = sortslices( B, dims=1, rev=true)
Run Code Online (Sandbox Code Playgroud)
然后,我们得到排序B
B =
[ 2 4 4 4 5 ;
1 2 2 3 5 ;
1 2 3 3 3 ;
1 2 2 5 6 ;
1 3 4 4 4 ; ]
Run Code Online (Sandbox Code Playgroud)
我想得到数组[1 5 3 4 2]。我怎样才能做到这一点 ?
看来这sortperm不行。
sortperm( sortslices( B, dims=1, rev=true) )
# ERROR: MethodError; no method matching sortperm(::Matrix{Int64})
Run Code Online (Sandbox Code Playgroud)
如果性能是一个问题,请使用非分配版本。
julia> sortperm(view.(Ref(B), 1:size(B,1), :), rev=true)
5-element Vector{Int64}:
1
5
3
4
2
Run Code Online (Sandbox Code Playgroud)
以下是一些基准using BenchmarkTools:
julia> @btime sortperm(view.(Ref($B), 1:size($B,1), :),rev=true);
376.471 ns (3 allocations: 432 bytes)
julia> @btime sortperm(collect(eachslice($B,dims=1)),rev=true)
642.683 ns (6 allocations: 496 bytes);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |