首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy.random.exponential(scale=1.0)返回大于1的数字

numpy.random.exponential(scale=1.0)返回大于1的数字
EN

Stack Overflow用户
提问于 2016-02-27 08:43:53
回答 2查看 4.1K关注 0票数 0

除非我完全疯了,否则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的值。

我觉得我在理解上犯了一些愚蠢的错误,但却找不到它。任何帮助都将不胜感激。

我运行的示例代码如下:

代码语言:javascript
复制
import numpy as np
print np.random.exponential(scale=1.0)

返回值示例:

代码语言:javascript
复制
1.56783951494
EN

回答 2

Stack Overflow用户

发布于 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的值:

代码语言:javascript
复制
>>> 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)

检查:

代码语言:javascript
复制
>>> 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。

票数 2
EN

Stack Overflow用户

发布于 2016-02-27 09:04:02

我想我已经意识到我犯了个愚蠢的错误。它不是返回f( x,beta),而是返回x,谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35664274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档