除非我已经完全疯了,否则numpy.random.exponential()的文档
http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.exponential.html
建议将scale参数设置为1.0应该保证函数调用返回0.0到1.0之间的数字,因为它仅为x>定义。 0.
我已经在wolfram alpha上绘制了它,以确认我不会疯狂,它的范围从0到1.
https://www.wolframalpha.com/input/?i=graph+exp(-x)+from+-1+to+10
我也试过numpy.random.exponential(),因为默认参数是1.0和numpy.random.standard_exponential(),但两者有时给我的值大于1.
我觉得我在理解中犯了一些愚蠢的错误,却找不到它。任何帮助将不胜感激。
我跑的示例代码:
1.56783951494
示例返回值:
GroupBy
答案 0 :(得分:1)
指数函数的pdf = 1 / beta * exp(-x / beta)。你传递的是scale = beta = 1.0,所以你有pdf = 1/1 * exp(-x / 1)= exp(-x)。
这不是0以上1.事实上,你有63%的机会获得0到1之间的数字,有37%的机会获得高于1的数值:
>>> quad(lambda x: np.exp(-x), 0, 1)
(0.6321205588285578, 7.017947987503856e-15)
>>> quad(lambda x: np.exp(-x), 1, np.inf)
(0.3678794411714423, 2.149374899076157e-11)
检查:
>>> ns = np.random.exponential(scale=1.0, size=10**6)
>>> (ns < 1).mean()
0.63164799999999
现在确实 PDF exp(-x)
保持在0到1之间,但这并不意味着从分发中抽取的所有随机数在0和1之间。
想想死亡:任何给定结果的可能性是1/6,但每个数字结果都是> = 1。
答案 1 :(得分:0)
我想我已经意识到我的愚蠢错误了。它没有返回f(x,beta)它返回x。谢谢!