0

我正在寻找一个随机数函数,它可能会返回任何(正)数,但在统计上不太可能远离零。我有一个算法可以满足我的需要,但似乎效率低下:

def my_random():
    if random.randrange(2):
        return 1 + my_random()
    return 0

我知道可以在没有递归的情况下重写它,但这并不能真正否定低效率。任何人都可以提出具有更好性能的替代算法吗?

我的实现语言是python,但算法才是最重要的。

4

1 回答 1

4

如果您有一个函数返回 range 中的随机浮点数[0, 1),例如 Python 的random.random,那么您可以通过以下方式从指数分布中采样

def random_exponential(scale=1.):
    x = random.random()
    return -math.log(1. - x) * scale

(受我刚刚阅读的 NumPy 源代码的启发;如果可以np.random.exponential选择使用 NumPy,您也可以调用。)

如果您需要随机整数,请考虑截断这些整数。

于 2013-09-10T20:19:44.893 回答