2014-04-20 24 views
12

Vorrei ordinare la mia matrice A per colonna 2 quindi 3.Julia: Ordina Matrix per colonna 2 poi 3

A = round(randn(100,4)) 

Forse qualcosa di simile:

sort(A,(0,2:3)) 
100x4 Array{Float64,2}: 
    0.0 -2.0 -2.0 -1.0 
-1.0 -2.0 -1.0 1.0 
    1.0 -2.0 -1.0 2.0 
-1.0 -2.0 0.0 0.0 
-1.0 -2.0 0.0 -1.0 
-0.0 -2.0 0.0 -1.0 
    1.0 -2.0 0.0 0.0 
    1.0 -2.0 1.0 -1.0 
-0.0 -2.0 2.0 -1.0 
-0.0 -1.0 -2.0 1.0 
    ⋮      
-0.0 1.0 0.0 1.0 
    1.0 1.0 1.0 1.0 
    0.0 1.0 1.0 -1.0 
-0.0 1.0 2.0 0.0 
-0.0 2.0 -1.0 0.0 
-2.0 2.0 -1.0 1.0 
    2.0 2.0 -0.0 -1.0 
-1.0 2.0 -0.0 -1.0 
    1.0 2.0 0.0 2.0 
-1.0 2.0 2.0 0.0 

risposta

18

C'è una funzione che sortrows prende una parola chiave by che ti permette di fare questo:

julia> sortrows(A, by=x->(x[2],x[3])) 
100x4 Array{Float64,2}: 
    2.0 -3.0 -0.0 0.0 
-1.0 -2.0 -1.0 -1.0 
-0.0 -2.0 -0.0 0.0 
    0.0 -2.0 0.0 -1.0 
    1.0 -2.0 1.0 2.0 
-0.0 -2.0 1.0 -1.0 
-1.0 -1.0 -2.0 1.0 
-1.0 -1.0 -2.0 -0.0 
-1.0 -1.0 -1.0 1.0 
-0.0 -1.0 -1.0 0.0 
    ⋮ 
-0.0 1.0 1.0 -1.0 
-0.0 1.0 2.0 1.0 
    0.0 1.0 2.0 0.0 
-1.0 2.0 -2.0 1.0 
    0.0 2.0 -2.0 -2.0 
    1.0 2.0 -1.0 0.0 
    0.0 2.0 -1.0 -0.0 
-1.0 2.0 0.0 -1.0 
-0.0 2.0 2.0 0.0 
    1.0 3.0 2.0 1.0 

L'API di ordinamento è abbastanza flessibile - è possibile trovare la documentazione here.

Problemi correlati