#抽样 #确定性 #蓄水池 #采样器 #固定大小 #无限 #样本

infinity-sampler

针对Rust的确定性蓄水池采样

4个版本 (2个重大更新)

0.3.0 2024年1月21日
0.2.0 2024年1月20日
0.1.1 2024年1月20日
0.1.0 2024年1月20日

#1116算法

每月下载量 32次

MIT 协议

21KB
401

Infinity Sampler

✨ 无分配 ✨ 最小依赖 ✨ no_std 兼容 ✨

Infinity Sampler 允许您将无限值流自动采样到一个固定大小的缓冲区中,同时保持样本的均匀分布。

这是Reservoir Sampling算法的确定性变体。写入操作为 O(1),迭代操作为 O(N)。参见 [math] 以获取图解解释。

您的主要接口是 [SamplingReservoir] 结构体

use infinity_sampler::SamplingReservoir;

let mut reservoir = SamplingReservoir::<u32, 8>::new();
for i in 0..256 {
   reservoir.sample(i);
}
let samples: Vec<_> = reservoir.into_ordered_iter().collect();

assert_eq!(samples, vec![0, 32, 64, 96, 128, 160, 192, 224]);

依赖项

~480KB