count how many elements in a numpy array are within delta of every other element

后端 未结 2 1301
面向向阳花
面向向阳花 2020-12-18 08:12

consider the array x and delta variable d

np.random.seed([3,1415])
x = np.random.randint(100, size=10)
d = 10

For

2条回答
  •  半阙折子戏
    2020-12-18 08:50

    Listed in this post are two more variants based on the searchsorted strategy from OP's answer post.

    def pir3(a,d):  # Short & less efficient
        sidx = a.argsort()
        p1 = a.searchsorted(a+d,'right',sorter=sidx)
        p2 = a.searchsorted(a-d,sorter=sidx)
        return p1 - p2
    
    def pir4(a, d):   # Long & more efficient
        s = a.argsort()
    
        y = np.empty(s.size,dtype=np.int64)
        y[s] = np.arange(s.size)
    
        a_ = a[s]
        return (
            a_.searchsorted(a_ + d, 'right')
            - a_.searchsorted(a_ - d)
        )[y]
    

    The more efficient approach derives the efficient idea to get s.argsort() from this post.

    Runtime test -

    In [155]: # Inputs
         ...: a = np.random.randint(0,1000000,(10000))
         ...: d = 10
    
    
    In [156]: %timeit pir2(a,d) #@ piRSquared's post solution
         ...: %timeit pir3(a,d)
         ...: %timeit pir4(a,d)
         ...: 
    100 loops, best of 3: 2.43 ms per loop
    100 loops, best of 3: 4.44 ms per loop
    1000 loops, best of 3: 1.66 ms per loop
    

提交回复
热议问题