Revista Informática

Numpy básico: localizar valores únicos en arrays Numpy

Publicado el 16 octubre 2019 por Daniel Rodríguez @analyticslane

Una de las tareas más habituales con los conjuntos de datos es la identificación de los valores únicos. Por eso Numpy cuenta con una función para ello: unique(). En esta entrada se verá como utilizar esta función.

La función unique()

La función de Numpy que permite localizar valores únicos en arrays es unique(), la cual se puede utilizar de la siguiente forma:

np.unique(arr, return_index=False, return_inverse=False, return_counts=False, axis=None)

donde

  • arr: es el array de Numpy en el que se van a buscar los valores únicos.
  • return_index: es un valor lógico opcional que indica si se tiene que devolver el índice de las ocurrencias de cada valor único. Su valor por defecto es falso.
  • return_inverse: es un valor lógico opcional que indica si se tiene que devolver un array con el que recuperar el original a partir de los valores únicos. Su valor por defecto es falso.
  • return_counts: es un valor lógico opcional que indica si se tiene que devolver el número de ocurrencias de cada valor. Su valor por defecto es falso.
  • axis: si no se indica nada se aplica sobre la matriz. Se puede indicar 0 o 1 para que se aplique sobre las filas o columnas respectivamente.

La función devuelve una array Numpy con los valores únicos o, según las opciones indicadas, tuplas con información adicional. A continuación, se pueden ver algunos ejemplos de uso de esta función.

Obtener los valores únicos en arrays Numpy

El uso básico de la función unique() es pasándole simplemente un array Numpy. Por ejemplo, se puede crear uno con valores duplicados y observar cómo se pueden obtener los que nos únicos.

import numpy as np

arr = np.array([12, 12, 9, 1, 2, 9, 8, 2, 1])

np.unique(arr)
array([ 1,  2,  8,  9, 12])

Identificar la primera aparición de los valores en arrays Numpy

Una de las opciones que tiene unique() es la posibilidad de devolver la posición de la primera ocurrencia de cada uno de los valores. Para ello se tiene que indicar el valor de return_index como verdadero. En tal caso se obtendrá una tupla con los valores únicos en primer lugar y las posiciones en el segundo. Algo que se puede ver en el siguiente ejemplo.

np.unique(arr, return_index=True)
(array([ 1,  2,  8,  9, 12]), array([3, 4, 6, 2, 0]))

Algo que se puede utilizar para recuperar los valores únicos a partir del vector original.

unique, indices = np.unique(arr, return_index=True)
arr[indices]

Contar el número de apariciones

Además de la posición también se puede obtener el número de ocurrencias de cada valor. Al igual que antes esto se indica en uno de los parámetros, en este caso return_counts. Con un funcionamiento similar al que se ha en el caso anterior.

np.unique(arr, return_counts=True)
(array([ 1,  2,  8,  9, 12]), array([2, 2, 1, 2, 2]))

Obtener un vector con que construir el original

Otra de la opciones que existen en unique() es la posibilidad de obtener un vector que permita recuperar el array original a partir del de únicos. Lo que depende de lo que se indique en la variable return_inverse. Lo que puede ser interesante en ciertas ocasiones.

unique, indices = np.unique(arr, return_inverse=True)
unique[indices]

En este ejemplo se puede apreciar cómo utilizar la salida de unique() para recuperar el array original a partir del de únicos.

Conclusiones

En esta entrada se ha visto la función unique() con la que es posible localizar valores únicos en arrays Numpy. Como se ha visto no solamente permite obtener los valores únicos, sino que también permite obtener las posiciones de estos y contar el número de ocurrencias. Por lo que es una función que se debe tener en cuenta.

Imágenes: Pixabay (Marit Welker)


Volver a la Portada de Logo Paperblog