Encuentra filas únicas en numpy.array
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 numpy
solució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.
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.unique
lo siguiente:
unique_rows = np.unique(original_array, axis=0)
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 a
sea 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 tuple
soluciona este problema al convertir el conjunto en una tupla, lo que lo hace aceptable para crear una matriz.