如果要对截断整数幂律进行采样,在python中可以使用什么函数?
也就是说,给定两个参数a
和m
,在x
范围内生成一个随机整数[1,m)
,该整数遵循与1/x^a
成比例的分布。
我一直在搜索numpy.random
,但没有找到此分发版。
最佳答案
afaik,numpy和scipy都没有为您定义这个分布。但是,使用scipy可以很容易地使用scipy.rv_discrete
定义自己的离散分布函数:
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
def truncated_power_law(a, m):
x = np.arange(1, m+1, dtype='float')
pmf = 1/x**a
pmf /= pmf.sum()
return stats.rv_discrete(values=(range(1, m+1), pmf))
a, m = 2, 10
d = truncated_power_law(a=a, m=m)
N = 10**4
sample = d.rvs(size=N)
plt.hist(sample, bins=np.arange(m)+0.5)
plt.show()