2016-04-26 15 views
5

Czy można zmienić układ wartości w wektorze, biorąc pod uwagę listę indeksów?Przegrupowanie wektora w miejscu w Julii?

Mam dwie tablice i chcę posortować arr2 na podstawie arr1, które są wstępnie alokowane.

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

'permut!' Jest twoim przyjacielem. Sprawdź pomoc przy pomocy polecenia '? Permute!' W zgłoszeniu REPL. –

+0

Fajnie, właśnie tego szukałem! Nie wiedziałem, że to istnieje. – tlnagy

+0

Czy chcesz dodać to jako odpowiedź, aby zaznaczyć to pytanie jako odpowiadające? – tlnagy

Odpowiedz

7

permute! jest twoim przyjacielem. Sprawdź pomoc pod numerem ?permute! w zgłoszeniu REPL.

szczególności

permute!(arr2,indices) 

powinny permutacji w miejscu arr2 w PO. Ale dokumenty sugerują duże wektory, więc lepiej jest po prostu utworzyć nową kopię.

+1

Chyba zależy to od tego, czy pamięć lub procesor są ograniczone, czy użyjesz 'permute! (Arr2, indeksy)' kontra 'arr2 [indeksy]' – tlnagy

+0

Niektóre procesory mogą mieć specjalne instrukcje dla 'arr2 [indeksów]' co czyni go lepszym dla dużych wektorów (patrz * scatter * i * gather * ops). Czy ktoś wie, czy LLVM/Julia z nich skorzysta? –