1
我想從冪指數分佈(a = -2)的冪律分佈中繪製一個介於2到15之間的隨機變量。我發現以下內容:Python:從冪律分佈生成隨機數
r = scipy.stats.powerlaw.rvs(a, loc = 2, scale = 13, size = 1000)
但它並不採用負數。
任何人都知道一條出路?在numpy.random
和scipy.stats
定義
我想從冪指數分佈(a = -2)的冪律分佈中繪製一個介於2到15之間的隨機變量。我發現以下內容:Python:從冪律分佈生成隨機數
r = scipy.stats.powerlaw.rvs(a, loc = 2, scale = 13, size = 1000)
但它並不採用負數。
任何人都知道一條出路?在numpy.random
和scipy.stats
定義
冪律分佈並不在答案解釋this question數學意義上的負a
定義:他們是因爲在零奇不normalizable。所以,不幸的是,數學說'不'。
您可以定義一個pdf的比例爲x^{g-1}
與g < 0
不包含零的區間,如果這就是你以後的分佈。
爲pdf(x) = const * x**(g-1)
爲a <= x <= b
,從一個統一的變量(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, b, g):
ag, bg = a**g, b**g
....: return g * x**(g-1)/(bg - ag)
這一切都假定a < b
和g != 0
。對於a=0
,b=1
和g > 0
,這些公式應與numpy.power
和scipy.stats.powerlaw
一致。
請嘗試(1/2)。實際上應該是同樣的事情。 –
有人在這裏回答了這個問題:http://stackoverflow.com/questions/17882907/python-scipy-stats-powerlaw-negative-exponent - 如果你從中理解了一些東西。 – Faflok
@RobFoley,我需要檢查它的不同負指數.. -1.5,-2,-3等。因此,我希望如果我能得到更一般的建議:( @Faflok我讀了..但它並沒有幫助我擺脫'a> 0'條件。 – Panchi