Finding False-True transitions in a numpy array

前端 未结 2 920
逝去的感伤
逝去的感伤 2020-12-30 15:34

Given a numpy array:

x = np.array([False, True, True, False, False, False, False, False, True, False])

How do I find the number of times th

相关标签:
2条回答
  • 2020-12-30 16:15

    I kind of like to use numpy method "roll" for this kind of problems... "roll" rotates the array to left some step length : (-1,-2,...) or to right (1,2,...)

    import numpy as np
    np.roll(x,-1)
    

    ...this will give x but shifted one step to the left:

    array([ True,  True, False, False, False, False, False,  True, False, False], 
    dtype=bool)
    

    A False followed by a True can then be expressed as:

    ~x & np.roll(x,-1)
    
    array([ True, False, False, False, False, False, False,  True, False, False], 
    dtype=bool)
    
    0 讨论(0)
  • 2020-12-30 16:17

    Get one-off slices - x[:-1] (starting from the first elem and ending in second last elem) and x[1:] (starting from the second elem and going on until the end), then look for the first slice being lesser than the second one, i.e. catch the pattern of [False, True] and finally get the count with ndarray.sum() or np.count_nonzero() -

    (x[:-1] < x[1:]).sum()
    np.count_nonzero(x[:-1] < x[1:])
    

    Another way would be to look for the first slice being False and the second one as True, the idea again being to catch that pattern of [False, True] -

    (~x[:-1] & x[1:]).sum()
    np.count_nonzero(~x[:-1] & x[1:])
    
    0 讨论(0)
提交回复
热议问题