【发布时间】:2017-02-12 11:27:06
【问题描述】:
我想用scipy.stats.gamma.rvs生成伽马分布随机变量
但是,API 接受形状和比例参数作为输入,我想使用均值和标准差作为输入。
我可以编写一个包装器,它将均值和标准值作为输入,计算比例和形状,然后使用 gamma.rvs 生成随机变量。但是我希望这个函数会被多次调用,所以如果我不必每次都进行计算,我会更喜欢。
我想出了以下解决方案:
from scipy.stats import gamma
def gamma_rvs_generator(mu, sigma):
var = sigma ** 2
scale = var / mu
a = mu / scale
return lambda: gamma.rvs(a=a, scale=scale)
if __name__ == '__main__':
gen = gamma_rvs_generator(10, 10)
print(gen())
这完全符合我的要求。但我想问一下,是否有更好/更 Pythonic 的解决方案。
【问题讨论】:
-
另一种方法是编辑 API,但事实并非如此。顺便问一下,你为什么用
lambda? -
@magicleon 这使它成为一个带有
0参数的函数,可以重复调用,每次产生不同的随机数。如果没有lambda,它将返回一个随机数,因此需要使用每个新的随机数重新运行包装器。 -
哦,像构造函数?不错!