Python包powerlaw可以做到這一點。考慮a>1
與概率密度函數
f(x) = c * x^(-a)
冪律分佈x > x_min
和f(x) = 0
否則。這裏c
是歸一化因子並且被確定爲
c = (a-1) * x_min^(a-1).
在下面的例子是a = 1.5
和x_min = 1.0
和比較從用來自表達PDF中的隨機樣本估計出的概率密度函數給出以上的預期結果。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as pl
import numpy as np
import powerlaw
a, xmin = 1.5, 1.0
N = 10000
# generates random variates of power law distribution
vrs = powerlaw.Power_Law(xmin=xmin, parameters=[a]).generate_random(N)
# plotting the PDF estimated from variates
bin_min, bin_max = np.min(vrs), np.max(vrs)
bins = 10**(np.linspace(np.log10(bin_min), np.log10(bin_max), 100))
counts, edges = np.histogram(vrs, bins, density=True)
centers = (edges[1:] + edges[:-1])/2.
# plotting the expected PDF
xs = np.linspace(bin_min, bin_max, 100000)
pl.plot(xs, [(a-1)*xmin**(a-1)*x**(-a) for x in xs], color='red')
pl.plot(centers, counts, '.')
pl.xscale('log')
pl.yscale('log')
pl.savefig('powerlaw_variates.png')
回報
到了最後一部分:使用正位置'loc'我們可以移動的分佈。隨後從這個解釋中可以看出,對'a'的限制可以作爲位置'loc'的函數來放鬆。應該值得進行一些測試,應該可以在scipy.stats中進行擴展。 – user333700
@ user333700:儘管可以使用loc來移動分配,但限制'a> 0'仍然存在,因爲在生成基礎分配之後最後執行移位。 – unutbu
你說得對,我沒有正確地思考這個問題。它需要一個額外的形狀參數來改變和擴大分配的支持。 – user333700