Find indexes of repeated elements in an array (Python, NumPy)

前端 未结 5 1254
甜味超标
甜味超标 2020-12-20 14:52

Assume, I have a NumPy-array of integers, as:

[34,2,3,22,22,22,22,22,22,18,90,5,-55,-19,22,6,6,6,6,6,6,6,6,23,53,1,5,-42,82]

I want to find

5条回答
  •  南笙
    南笙 (楼主)
    2020-12-20 15:04

    Using np.diff and the method given here by @WarrenWeckesser for finding runs of zeros in an array:

    import numpy as np
    
    def zero_runs(a):  # from link
        iszero = np.concatenate(([0], np.equal(a, 0).view(np.int8), [0]))
        absdiff = np.abs(np.diff(iszero))
        ranges = np.where(absdiff == 1)[0].reshape(-1, 2)
        return ranges
    
    a = [34,2,3,22,22,22,22,22,22,18,90,5,-55,-19,22,6,6,6,6,6,6,6,6,23,53,1,5,-42,82]
    
    zero_runs(np.diff(a))
    Out[87]: 
    array([[ 3,  8],
           [15, 22]], dtype=int32)
    

    This can then be filtered on the difference between the start & end of the run:

    runs = zero_runs(np.diff(a))
    
    runs[runs[:, 1]-runs[:, 0]>5]  # runs of 7 or more, to illustrate filter
    Out[96]: array([[15, 22]], dtype=int32)
    

提交回复
热议问题