加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:从幂律分布中生成随机数

发布时间:2020-12-20 12:08:31 所属栏目:Python 来源:网络整理
导读:参见英文答案 python scipy.stats.powerlaw negative exponent????????????????????????????????????4个 我想绘制一个2到15之间的随机变量,来自具有负指数(a = -2)的幂律分布.我找到了以下内容: r = scipy.stats.powerlaw.rvs(a,loc = 2,scale = 13,size =
参见英文答案 > python scipy.stats.powerlaw negative exponent????????????????????????????????????4个
我想绘制一个2到15之间的随机变量,来自具有负指数(a = -2)的幂律分布.我找到了以下内容:

r = scipy.stats.powerlaw.rvs(a,loc = 2,scale = 13,size = 1000)

但它并没有采取负数.

有人知道出路吗?

解决方法

numpy.random和scipy.stats中定义的幂律分布在数学意义上没有为负a定义,如 this question的答案中所解释的那样:由于奇点为零,它们不可规范化.所以,遗憾的是,数学说’不’.

您可以使用与x ^ {g-1}成比例的pdf定义分布,其中g <在不包含零的间隔上为0,如果这就是你所追求的. 对于< = x< = b的pdf(x)= const * x **(g-1),来自均匀变量(np.random.random)的变换是:

In [3]: def rndm(a,b,g,size=1):
    """Power-law gen for pdf(x)propto x^{g-1} for a<=x<=b"""
   ...:     r = np.random.random(size=size)
   ...:     ag,bg = a**g,b**g
   ...:     return (ag + (bg - ag)*r)**(1./g)

然后,你可以这样做,例如,

In [4]: xx = rndm(1,2,g=-2,size=10000)

等等.

为完整起见,这里是pdf:

In [5]: def pdf(x,a,g):
    ag,b**g
   ....:     return g * x**(g-1) / (bg - ag)

这一切都假设a< b和g!= 0.这些公式应该与numpy.power和scipy.stats.powerlaw一致,a = 0,b = 1和g> 0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读