带有生成器可迭代迭代器的Python随机样本

带有生成器可迭代迭代器的Python随机样本,第1张

带有生成器/可迭代/迭代器的Python随机样本

尽管Martijn
Pieters的答案是正确的,但当

samplesize
变大时,它的确会减慢速度,因为
list.insert
在循环中使用可能具有二次复杂度

我认为,这是在提高性能的同时保持一致性的一种替代方法:

def iter_sample_fast(iterable, samplesize):    results = []    iterator = iter(iterable)    # Fill in the first samplesize elements:    try:        for _ in xrange(samplesize): results.append(iterator.next())    except StopIteration:        raise ValueError("Sample larger than population.")    random.shuffle(results)  # Randomize their positions    for i, v in enumerate(iterator, samplesize):        r = random.randint(0, i)        if r < samplesize: results[r] = v  # at a decreasing rate, replace random items    return results

samplesize
上面的值开始逐渐显示出差异
10000
。致电时间
(1000000, 100000)

  • iter样本:5.05s
  • iter_sample_fast:2.64秒


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5640204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存