Ordenación de un array NumPy según los valores de otro array

En este escenario partimos de un array NumPy que, en nuestro ejemplo, contiene nombres:

names = np.array(["Susana", "Jorge", "Alicia", "Alfonso"])

...y de otro array, de la misma longitud, que contiene, en este ejemplo, edades:

ages = np.array([53, 29, 33, 19])

El objetivo es ordenar el primer array, names, según los valores del segundo, ages. Para esto necesitamos usar la función np.argsort(), que devuelve los índices de los valores de un array una vez ordenados. Por ejemplo, si pasamos a esta función nuestro array ages, el resultado es el siguiente:

np.argsort(ages)

array([3, 1, 2, 0], dtype=int64)

(la función anterior también está disponible como método).

Es decir, estamos obteniendo las posiciones de las edades ordenadas -por defecto- de menor a mayor. Comprobamos que el menor valor es el situado en la posición 3 (la edad "19"), a continuación es el valor situado en la posición 1 (la edad "29"), etc.

Si ahora pasamos el resultado anterior como índices a extraer del array names, el resultado es exactamente el buscado:

names[ages.argsort()]

array(['Alfonso', 'Jorge', 'Alicia', 'Susana'], dtype='<U7')

Efectivamente Alfonso es la persona con menor edad (19), seguido de Jorge (29), etc.

Si quisiéramos obtener los valores ordenados de mayor a menor, bastaría con darle la vuelta al array de edades:

names[ages[::-1].argsort()]

array(['Susana', 'Alicia', 'Jorge', 'Alfonso'], dtype='<U7')

Categoría
Enviado por admin el Lun, 22/06/2020 - 15:31