Home > Mobile >  Sample irregular list of numbers with a set delta
Sample irregular list of numbers with a set delta

Time:11-21

Is there a simpler way, using e.g. numpy, to get samples for a given X and delta than the below code?

>>> X = [1, 4, 5, 6, 11, 13, 15, 20, 21, 22, 25, 30]
>>> delta = 5
>>> samples = [X[0]]
>>> for x in X:
...     if x - samples[-1] >= delta:
...         samples.append(x)
        
>>> samples
[1, 6, 11, 20, 25, 30]

CodePudding user response:

If you are aiming to "vectorize" the process for performance reasons (e.g. using numpy), you could compute the number of elements that are less than each element plus the delta. This will give you indices for the items to select with the items that need to be skipped getting the same index as the preceding ones to be kept.

import numpy as np

X = np.array([1, 4, 5, 6, 11, 13, 15, 20, 21, 22, 25, 30])
delta = 5

i = np.sum(X<X[:,None] delta,axis=1) # index of first to keep
i = np.insert(i[:-1],0,0) # always want the first, never the last
Y = X[np.unique(i)]       # extract values as unique indexes

print(Y)
[ 1  6 11 20 25 30]

This assumes that the numbers are in ascending order

  • Related