python指定概率选择元素_python – 给定iterable,用概率p独立选择每个元素

直到第一次成功的伯努利试验数量由

geometric distribution表示.因此,您可以使用它来生成要使用numpy.random.geometric跳过的项目数:

import itertools

import numpy

def binomial_choice(L, p):

iterator = iter(L)

while True:

to_skip = numpy.random.geometric(p) - 1

yield next(itertools.islice(iterator, to_skip, None))

这适用于任何迭代器,您无需事先知道长度.

但是对于Python 3.5,由于PEP 479,你必须使用更复杂的版本:

def binomial_choice(L, p):

iterator = iter(L)

try:

while True:

to_skip = numpy.random.geometric(p) - 1

yield next(itertools.islice(iterator, to_skip, None))

except StopIteration:

return

用法示例:

In [1]: list(binomial_choice(range(100), 0.05))

Out[1]: [9, 15, 31, 53, 92, 93]

In [2]: list(binomial_choice(range(5), 1))

Out[2]: [0, 1, 2, 3, 4]

分布似乎非常正确:

In [5]: sum(len(lis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值