有界域zipf分布的抽样

2024-06-07 00:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从有界域的“zipf”分布中取样。在

也就是说,假设域是{1,…,N},我希望域中的每一个元素,都以概率与i ** -a成正比,其中{}是分布的一个参数。在

numpy提供了一个zipf采样器(numpy.random.zipf),但它不允许我限制域。在

How can I easily sample from such distribution?


如果分布参数a大于1,我可以使用numpy取样器,拒绝(并重新采样)大于N的所有样本。但是,由于它不限制采样范围,所以尝试使用任何较小的a值都不起作用。在

当域是有限的时,使用这样的a应该没有问题,这就是我的应用程序所需要的。在


Tags: samplefromnumpy元素参数randomzipf概率
2条回答

使用scipy.stats,您可以创建一个自定义的离散分布:

bounded_zipf = stats.rv_discrete(name='bounded_zipf', values=(x, weights))

例如

^{pr2}$

收益率 enter image description here

如果采样性能有问题,您可以基于拒绝反转采样实现自己的采样方法。您将找到相应的Java实现here。在

相关问题 更多 >