Skip to content Skip to sidebar Skip to footer

How To Remove The Adjacent Duplicate Value In A Numpy Array?

Given a numpy array, I wish to remove the adjacent duplicate non-zero value and all the zero value. For instance, for an array like that: [0,0,1,1,1,2,2,0,1,3,3,3], I'd like to tra

Solution 1:

You can use the groupby method from itertools combined with list comprehension for this problem:

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

# [1,2,1,3]

Data:

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

Solution 2:

Here's one way:

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])

Solution 3:

import numpy as npa= np.array([0,0,1,1,1,2,2,0,1,3,3,3])

Use integer indexing to choose the non-zero elements

b = a[a.nonzero()]

>>>b
array([1, 1, 1, 2, 2, 1, 3, 3, 3])
>>>

Shift the array to the left and add an element to the end to compare each element with its neighbor. Use zero since you know there aren't any in b.

b1 = np.append(b[1:], 0)

>>>b1
array([1, 1, 2, 2, 1, 3, 3, 3, 0])
>>>

Use boolean indexing to get the values you want.

c = b[b != b1]

>>>c
array([1, 2, 1, 3])
>>>

Solution 4:

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

first, remove the zeros:

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

now remove the consecutive duplicates

note that ediff1d(a) & a have different shapes, hence a1 is not the result; the leading value of a has to be pre-pended to it, as i did in the last three lines below)

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

create an empty array to store the result

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

Post a Comment for "How To Remove The Adjacent Duplicate Value In A Numpy Array?"