2012-01-25 17 views
12

Estoy tratando de ordenar las filas de una matriz por los valores de otra. Por ejemplo:Ordenar filas de matriz por otra matriz en Python

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

Quiero ordenar arr1 en orden descendente, y para tener la relación actual entre arr1 y arr2 ser mantenida (es decir, después de la clasificación tanto, la fila de arr1[0] y arr2[0, :] son los mismos).

Respuesta

18

Uso argsort de la siguiente manera:

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

ordena en orden descendente.

3

Utilice la función zip: zip(*sorted(zip(arr1, arr2))) Esto hará lo que necesite.

Ahora la explicación: zip(arr1, arr2) combinará las dos listas, por lo que tiene [(0, [... lista 0 ...]), (1, [... lista 1 ...]), ...] A continuación ejecutamos sorted(...), que por defecto se ordena según el primer campo de la tupla. Luego ejecutamos zip(...) nuevamente, que toma las tuplas de ordenadas, y crea dos listas, desde el primer elemento en la tupla (desde arr1) y el segundo elemento (desde arr2).

Cuestiones relacionadas