2016-04-26 7 views
5

È possibile riorganizzare i valori in un vettore dato un elenco di indici?Riorganizzazione sul posto del vettore in Julia?

Ho due array e voglio ordinare arr2 basato su arr1 che sono entrambi preallocati.

indices = zeros(length(arr1)) 
sortperm!(indices, arr1) 
arr2[indices] <-- this returns a copy 
+1

'permute!' È tuo amico. Controllare l'aiuto con '? Permute!' Sul prompt REPL. –

+0

Bello, è esattamente quello che stavo cercando! Non sapevo che esistesse. – tlnagy

+0

Vuoi aggiungerlo come risposta in modo da poter contrassegnare questa domanda come risposta? – tlnagy

risposta

7

permute! è tuo amico. Controllare l'aiuto con ?permute! sul prompt REPL.

particolare,

permute!(arr2,indices) 

dovrebbe permutare sul posto arr2 nel PO. Ma i documenti suggeriscono su vettori di grandi dimensioni, potrebbe essere meglio creare una nuova copia.

+1

Suppongo che dipenda se la memoria o la CPU sono limitati se si usi 'permute! (Arr2, indici)' vs 'arr2 [indici]' – tlnagy

+0

Alcune CPU potrebbero avere istruzioni speciali per 'arr2 [indici]' che lo rende migliore per i vettori di grandi dimensioni (vedi * scatter * e * gather * ops). Qualcuno sa se LLVM/Julia userebbe quelli? –