Pan*_*chi 3 python statistics numpy scipy
我想绘制一个2到15之间的随机变量,来自具有负指数(a = -2)的幂律分布.我找到了以下内容:
r = scipy.stats.powerlaw.rvs(a, loc = 2, scale = 13, size = 1000)
Run Code Online (Sandbox Code Playgroud)
但它并没有采取负数.
有人知道出路吗?
ev-*_*-br 11
如在该问题的答案中所解释的那样,在数学意义上定义的幂律分布numpy.random并且scipy.stats没有定义为负值:由于奇点为零,它们不可规范化.所以,遗憾的是,数学说'不'.a
您可以使用x^{g-1}与g < 0不包含零的间隔成比例的pdf定义分布,如果这是您所追求的.
对于pdf(x) = const * x**(g-1)for a <= x <= b,从均匀variate(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)
Run Code Online (Sandbox Code Playgroud)
然后,你可以这样做,例如,
In [4]: xx = rndm(1, 2, g=-2, size=10000)
Run Code Online (Sandbox Code Playgroud)
等等.
为完整起见,这里是pdf:
In [5]: def pdf(x, a, b, g):
ag, bg = a**g, b**g
....: return g * x**(g-1) / (bg - ag)
Run Code Online (Sandbox Code Playgroud)
这一切都假设a < b和g != 0.这些公式应该同意numpy.power和scipy.stats.powerlawfor a=0,b=1and g > 0.