1.水库抽样python算法实现 (1) 数据流:创建长度为10000的列表存放某时刻的数据流;每条数据的取值为1~5的随机整数; (2)实现水库抽样算法,并对第一步构建的数据流进行抽样,样本容量为200;
时间: 2024-10-20 11:05:00 浏览: 53
os-fast-reservoir:快速近似水库采样的Python实现
水库抽样是一种在线随机采样的算法,适用于大数据流场景。其原理是在一个固定大小的“水库”(比如200)中等概率地选择元素,保证每个元素被选中的概率与其在整个数据流中的比例相等。
以下是Python实现水库抽样算法的一个简短示例:
```python
import random
# (1) 创建数据流
data_stream = [random.randint(1, 5) for _ in range(10000)]
# (2) 实现水库抽样算法
def reservoir_sampling(stream, sample_size):
reservoir = []
for i, value in enumerate(stream):
if len(reservoir) < sample_size:
reservoir.append(value)
else:
r = random.randint(0, i)
if r < sample_size:
reservoir[r] = value
return reservoir
sampled_data = reservoir_sampling(data_stream, 200)
```
在这个例子中,我们首先生成了一个包含10000个1到5之间随机整数的列表。然后使用`reservoir_sampling`函数,每次迭代时检查当前元素是否需要替换已经在水库中的元素。如果水库已满(即size=200),那么就随机选择一个位置(r),如果这个位置小于200,我们就把新的元素放在该位置上,旧的元素会被覆盖掉。
运行这个算法后,`sampled_data`就是一个包含200个随机数据点的子集,它们在原始数据流中是均匀分布的。
阅读全文