在Python中采用截断的整数幂律?

bec*_*cko 5 python random numpy distribution

如果我想采样截断的整数幂律,我可以在Python中使用什么函数?

也就是说,给定两个参数,a并且在跟随与之成比例的分布的范围内m生成随机整数.x[1,m)1/x^a

我一直在寻找numpy.random,但我没有找到这个分布.

unu*_*tbu 5

AFAIK, neither NumPy nor Scipy defines this distribution for you. However, using SciPy it is easy to define your own discrete distribution function using 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述