Eliminar los siguientes duplicados en una matriz numpy

Me gustaría eliminar los duplicados que se siguen, pero no los duplicados a lo largo de toda la matriz. También quiero mantener el orden sin cambios.

Entonces, si la entrada es [0 0 1 3 2 2 3 3] la salida debería ser [0 1 3 2 3]

Encontré una forma de usar itertools.groupby() pero estoy buscando una solución de numpy más numpy .

 a[np.insert(np.diff(a).astype(np.bool),0,True)] Out[99]: array([0, 1, 3, 2, 3]) 

La idea general es usar diff para encontrar la diferencia entre dos elementos consecutivos en la matriz. Luego solo indexamos aquellos que dan elementos de diferencias non-zero . Pero dado que la longitud de diff es más corta en 1. Entonces, antes de indexar, necesitamos insert el valor True al principio de la matriz de diff.

Explicación:

 In [100]: a Out[100]: array([0, 0, 1, 3, 2, 2, 3, 3]) In [101]: diff = np.diff(a).astype(np.bool) In [102]: diff Out[102]: array([False, True, True, True, False, True, False], dtype=bool) In [103]: idx = np.insert(diff, 0, True) In [104]: idx Out[104]: array([ True, False, True, True, True, False, True, False], dtype=bool) In [105]: a[idx] Out[105]: array([0, 1, 3, 2, 3]) 

Para python puro que también funciona con matrices numpy usa esto:

 def modify(l): last = None for e in l: if e != last: yield e last = e pure = modify([0, 0, 1, 3, 2, 2, 3, 3]) import numpy num = numpy.array(modify(numpy.array([0, 0, 1, 3, 2, 2, 3, 3]))) 

No sé si hay alguna función numpy que acelere esto.