Python: elimina duplicados de una matriz multidimensional

En Python, numpy.unique puede eliminar todos los duplicados de una matriz 1D de manera muy eficiente.

1) ¿Qué tal eliminar filas o columnas duplicadas en una matriz 2D ?

2) ¿Qué tal para nD matrices ?

Si es posible usaría pandas.

 In [1]: from pandas import * In [2]: import numpy as np In [3]: a = np.array([[1, 1], [2, 3], [1, 1], [5, 4], [2, 3]]) In [4]: DataFrame(a).drop_duplicates().values Out[4]: array([[1, 1], [2, 3], [5, 4]], dtype=int64) 

El siguiente es otro enfoque que funciona mucho mejor que for bucle. 2s para 10k + 100 duplicados.

 def tuples(A): try: return tuple(tuples(a) for a in A) except TypeError: return A b = set(tuples(a)) 

La idea inspirada en la primera parte de Waleed Khan . Por lo tanto, no es necesario ningún paquete adicional que pueda tener otras aplicaciones. También es super pythonico, supongo.

El paquete numpy_indexed resuelve este problema para el caso n-dimensional. (descargo de responsabilidad: soy su autor). De hecho, resolver este problema fue la motivación para comenzar este paquete; pero ha crecido para incluir muchas funcionalidades relacionadas.

 import numpy_indexed as npi a = np.random.randint(0, 2, (3, 3, 3)) print(npi.unique(a)) print(npi.unique(a, axis=1)) print(npi.unique(a, axis=2))