Remove consecutive duplicates in a NumPy array

后端 未结 2 2385
执笔经年
执笔经年 2020-12-06 14:40

I would like to remove duplicates which follow each other, but not duplicates along the whole array. Also, I want to keep the ordering unchanged.

So if the input is

2条回答
  •  伪装坚强ぢ
    2020-12-06 15:15

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

    The general idea is to use diff to find the difference between two consecutive elements in the array. Then we only index those which give non-zero differences elements. But since the length of diff is shorter by 1. So before indexing, we need to insert the True to the beginning of the diff array.

    Explanation:

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

提交回复
热议问题