¿Cómo eliminar el valor duplicado adyacente en una matriz numpy?

Dada una matriz numpy, deseo eliminar el valor no cero cero duplicado adyacente y todo el valor cero. Por ejemplo, para una matriz como esa: [0,0,1,1,1,2,2,0,1,3,3,3] , me gustaría transformarla en: [1,2,1,3] . ¿Sabes como hacerlo? Solo sé np.unique(arr) pero eliminaría todo el valor duplicado y mantendría el valor cero. ¡Gracias de antemano!

Puede usar el método groupby de itertools combinado con una lista de comprensión para este problema:

 from itertools import groupby [k for k,g in groupby(a) if k!=0] # [1,2,1,3] 

Datos :

 a = [0,0,1,1,1,2,2,0,1,3,3,3] 

Aquí hay una forma:

 In [62]: x Out[62]: array([0, 0, 1, 1, 1, 2, 2, 0, 1, 3, 3, 3]) In [63]: selection = np.ones(len(x), dtype=bool) In [64]: selection[1:] = x[1:] != x[:-1] In [65]: selection &= x != 0 In [66]: x[selection] Out[66]: array([1, 2, 1, 3]) 
 import numpy as np a = np.array([0,0,1,1,1,2,2,0,1,3,3,3]) 

Utilice la indexación de enteros para elegir los elementos que no son cero

 b = a[a.nonzero()] >>> b array([1, 1, 1, 2, 2, 1, 3, 3, 3]) >>> 

Desplace la matriz hacia la izquierda y agregue un elemento al final para comparar cada elemento con su vecino. Usa cero ya que sabes que no hay ninguno en b .

 b1 = np.append(b[1:], 0) >>> b1 array([1, 1, 2, 2, 1, 3, 3, 3, 0]) >>> 

Utilice la indexación booleana para obtener los valores que desea.

 c = b[b != b1] >>> c array([1, 2, 1, 3]) >>> 
 >>> import numpy as NP >>> a = NP.array([0,0,1,1,1,2,2,0,1,3,3,3]) 

Primero, quita los ceros:

 >>> idx = a==0 >>> a = a[-idx1] >>> a array([1, 1, 1, 2, 2, 1, 3, 3, 3]) 

Ahora quita los duplicados consecutivos

tenga en cuenta que ediff1d (a) y a tienen diferentes formas, por lo tanto, a1 no es el resultado; el valor inicial de a tiene que ser prefijado, como hice en las últimas tres líneas a continuación)

 >>> idx = NP.array(NP.ediff1d(a), dtype=bool) >>> a1 = a[1:][idx] array([2, 1, 3]) 

crear una matriz vacía para almacenar el resultado

 >>> a0 = NP.empty(shape=(a1.shape[0]+1,)) >>> a0[0] = a[0] >>> a0[1:] = a1 >>> a0 array([ 1, 2, 1, 3])