python分布采样_python – 从有界域zipf分布中采样

我想从有界域中的“zipf”分发中进行抽样.

也就是说,假设域是{1,…,N},我想要选择域中的每个元素i,其概率与i ** -a成比例,其中a是a的参数.分配.

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

How can I easily sample from such distribution?

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

当域是有限的时,应该没有问题,例如,这就是我的应用程序所需要的.

解决方法:

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

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

例如,

import numpy as np

import scipy.stats as stats

import matplotlib.pyplot as plt

N = 7

x = np.arange(1, N+1)

a = 1.1

weights = x ** (-a)

weights /= weights.sum()

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

sample = bounded_zipf.rvs(size=10000)

plt.hist(sample, bins=np.arange(1, N+2))

plt.show()

产量

标签:python,probability,distribution,sampling

来源: https://codeday.me/bug/20190609/1202719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值