除非我完全疯了,否则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()和numpy.random.standard_exponential(),因为默认参数是1.0,但两者有时都会给出大于1的值。
我觉得我在理解上犯了一些愚蠢的错误,但却找不到它。任何帮助都将不胜感激。
我运行的示例代码如下:
import numpy as np
print np.random.exponential(scale=1.0)返回值示例:
1.56783951494发布于 2016-02-27 08:58:10
指数函数的pdf = 1/beta * exp(-x/beta)。您正在传递scale = beta = 1.0,因此您的pdf = 1/1 * exp(-x/1) = exp(-x)。
这不是大于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。
发布于 2016-02-27 09:04:02
我想我已经意识到我犯了个愚蠢的错误。它不是返回f( x,beta),而是返回x,谢谢!
https://stackoverflow.com/questions/35664274
复制相似问题