如何在不放回的情况下对每个选择以连续三个为一个单元进行重采样

How to resample without replacement considering consecutive three as one unit for each choice

目标是从原始总体中抽取 n 个数据点。但是原来的种群是有序列相关性的(可以看做是时间序列数据),每次选择都想选择相邻的三个作为一个单元。也就是说,每次都要选择相邻的三个数据点。必须选择不更换。

重复选择,直到样本数据点数达到n。每个选定的数据点都必须是唯一的。 (假设人口数据点都是唯一的。)

如何将其写入代码?我希望代码快点。

def subsampling(self, population, size, consecutive = 3):
    #make seeds which doesn't have neighbors
    seed_samples = np.random.choice(population, 
                                    size = int(size/consecutive), 
                                    replace = False)
    target_samples = set(seed_samples)
    #add neighbors to each seed samples
    for dpoint in seed_samples:
        start = np.searchsorted(population, dpoint, side = 'right')
        neighbors = population[start:(start + consecutive -1)]
        target_samples.add(neighbors)
        
    return sorted(list(target_samples))

此代码是我的粗略试验,但它没有给出正确的大小,因为可能存在重复。

假设总体为 1000 个条目,而您需要 200 个不重叠的三元组。

一个简单的方法是:提取x[0], x[1],... x[199] 200个从0到599(600 = 1000-200*2)的唯一随机数。对值进行排序,然后三元组所需的索引是:

0. x[0], x[0]+1, x[0]+2
1. x[1]+2, x[1]+3, x[1]+4
2. x[2]+4, x[2]+5, x[2]+6
...
n. x[n]+2*n, x[n]+2*n+1, x[n]+2*n+2
...
199. x[199]+398, x[199]+399, x[199]+400