Encuentra filas únicas en numpy.array

Resuelto Akavall asked hace 11 años • 20 respuestas

Necesito encontrar filas únicas en un archivo numpy.array.

Por ejemplo:

>>> a # I have
array([[1, 1, 1, 0, 0, 0],
       [0, 1, 1, 1, 0, 0],
       [0, 1, 1, 1, 0, 0],
       [1, 1, 1, 0, 0, 0],
       [1, 1, 1, 1, 1, 0]])
>>> new_a # I want to get to
array([[1, 1, 1, 0, 0, 0],
       [0, 1, 1, 1, 0, 0],
       [1, 1, 1, 1, 1, 0]])

Sé que puedo crear un conjunto y recorrer la matriz, pero estoy buscando una numpysolución pura y eficiente. Creo que hay una manera de establecer el tipo de datos como anulado y luego podría usarlo numpy.unique, pero no pude entender cómo hacerlo funcionar.

Akavall avatar Jun 07 '13 02:06 Akavall
Aceptado

A partir de NumPy 1.13, uno puede simplemente elegir el eje para la selección de valores únicos en cualquier matriz N-dim. Para obtener filas únicas, utilice np.uniquelo siguiente:

unique_rows = np.unique(original_array, axis=0)
aiwabdn avatar May 19 '2017 12:05 aiwabdn

Otra posible solución

np.vstack({tuple(row) for row in a})

Editar: Como otros han mencionado, este enfoque está obsoleto a partir de NumPy 1.16. En las versiones modernas puedes hacer

np.vstack(tuple(set(map(tuple,a))))

Donde map(tuple,a)hace que cada fila de la matriz asea hash convirtiéndola en tuplas. set(map(tuple,a))crea un conjunto a partir de todas estas filas únicas. Los conjuntos son iterables que no son secuenciales y, como tales, ya no se pueden usar directamente para construir matrices NumPy. La llamada externa a tuplesoluciona este problema al convertir el conjunto en una tupla, lo que lo hace aceptable para crear una matriz.

Greg von Winckel avatar Apr 08 '2014 15:04 Greg von Winckel