0

目标是从原始总体中抽取 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))

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

4

1 回答 1

1

假设总体是 1000 个条目,并且您想要 200 个不重叠的三元组。

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

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
于 2020-07-02T14:15:39.793 回答