python - 如何在不替换的情况下重新采样,将连续三个视为每个选择的一个单元
问题描述
目标是从原始总体中抽取 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]
从 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
推荐阅读
- xamarin.forms - Xamarin Forms:WhenActivated 未针对视图模型触发响应式 UI
- html - html 和 css 的新手 - 如何修改网格定位
- reactjs - react-redux 应用程序中 vertx 事件总线的生命周期是什么?
- android - 将可检查的列表视图放入片段
- c# - System.Threading.Timer windows服务内存泄漏
- php - 更新 Woocommerce 3 中的产品可见性
- extjs - ext.net 上的浏览器关闭确认
- r - R中的指数分布
- ios - IOS 上的 WebRTC 应用程序无法在美国 iPhone 上运行
- c# - 参数值“421.0526000000”超出范围