2012-01-25 20 views
12

Sto provando a ordinare le righe di un array in base ai valori di un altro. Ad esempio:Ordina le righe dell'array in un altro array in Python

import numpy as np 
arr1 = np.random.normal(1, 1, 80) 
arr2 = np.random.normal(1,1, (80,100)) 

voglio ordinare arr1 in ordine decrescente, e di avere il rapporto attuale tra arr1 e arr2 essere mantenuto (cioè, dopo l'ordinamento entrambi, la fila di arr1[0] e arr2[0, :] sono gli stessi).

risposta

18

Usa argsort come segue:

arr1inds = arr1.argsort() 
sorted_arr1 = arr1[arr1inds[::-1]] 
sorted_arr2 = arr2[arr1inds[::-1]] 

E 'sorta in ordine decrescente.

3

Utilizzare la funzione zip: zip(*sorted(zip(arr1, arr2))) Ciò farà ciò che è necessario.

Ora la spiegazione: zip(arr1, arr2) combinerà le due liste, quindi hai [(0, [... lista 0 ...]), (1, [... lista 1 ...]), ...] Successivamente eseguiamo sorted(...), che per impostazione predefinita ordina in base al primo campo della tupla. Quindi eseguiamo nuovamente zip(...), che separa le tuple e crea due elenchi, dal primo elemento nella tupla (da arr1) al secondo elemento (da arr2).

Problemi correlati