我正在寻找一个随机数函数,它可能会返回任何(正)数,但在统计上不太可能远离零。我有一个算法可以满足我的需要,但似乎效率低下:
def my_random():
if random.randrange(2):
return 1 + my_random()
return 0
我知道可以在没有递归的情况下重写它,但这并不能真正否定低效率。任何人都可以提出具有更好性能的替代算法吗?
我的实现语言是python,但算法才是最重要的。
我正在寻找一个随机数函数,它可能会返回任何(正)数,但在统计上不太可能远离零。我有一个算法可以满足我的需要,但似乎效率低下:
def my_random():
if random.randrange(2):
return 1 + my_random()
return 0
我知道可以在没有递归的情况下重写它,但这并不能真正否定低效率。任何人都可以提出具有更好性能的替代算法吗?
我的实现语言是python,但算法才是最重要的。
如果您有一个函数返回 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,您也可以调用。)
如果您需要随机整数,请考虑截断这些整数。