如果要对截断整数幂律进行采样,在python中可以使用什么函数?
也就是说,给定两个参数am,在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()

08-03 17:23