答案 0 :(得分:2)
您可以使用Beta distribution,例如
import numpy as np
np.random.seed(2018)
np.random.beta(2, 5, 10)
#array([ 0.18094173, 0.26192478, 0.14055507, 0.07172968, 0.11830031,
# 0.1027738 , 0.20499125, 0.23220654, 0.0251325 , 0.26324832])
这里我们从Beta(2, 5)
分布中提取数字
Beta分布是统计中非常通用的基础分布;无需赘述,可以通过更改参数alpha
和beta
来使分布左偏,右偏,均匀,对称等。分布是在间隔{{1}上定义的},这与您追求的目标保持一致。
尽管Kumaraswamy distribution肯定比Beta distribution具有更好的代数性质,但我认为后者是更基本的分布。例如,在贝叶斯推断中,当处理二项式(类)过程时,Beta分布通常作为共轭进入。
第二,可以用参数[0, 1]
,alpha
非常简单地表示Beta分布的均值和方差;例如,平均值仅由beta
给出。
最后,从计算和统计推断的角度来看,将Beta分布拟合到数据通常是在Python(或R)中的几行代码中完成的,其中大多数Python库(如alpha / (alpha + beta)
和{{ 1}}已经包括处理Beta分布的方法。
答案 1 :(得分:2)
我会倾向于自然地以[0 ... 1]区间(或以后可以重新缩放的任何其他[a ... b]区间)为界的分布,例如@MauritsEvers答案。原因是,您知道分布,并且可以得出(或阅读)一些有趣的事实。如果您使用chi2 adn截断它,则不清楚如何争论所拥有财产的性质。
我个人更喜欢Kumaraswamy distribution而不是Beta分布,均值,众数,方差等表达式要简单得多。
只需安装
pip install kumaraswamy
和样品
from kumaraswamy import kumaraswamy
d = kumaraswamy(a=2.0, b=5.0)
q = d.rvs(10)
print(q)
将按照Wiki文章中的洋红色曲线生成10个数字。
如果您不希望使用Beta或Kumaraswamy,则有f.e. Logit-normal distribution和其他很多人
答案 2 :(得分:1)
查看numpy.random.chisquare method库。
numpy.random.chisquare(df, size=None)
>>> np.random.chisquare(2,4)
array([ 1.89920014, 9.00867716, 3.13710533, 5.62318272])
答案 3 :(得分:1)
如果要从ChiSquare分布中提取大小为N = 5
的样本,可以尝试使用OpenTURNS库:
import openturns as ot`
# define your distribution. Here, nu = 3. (nu is a float > 0)
distribution = ot.ChiSquare(3)
# draw a sample of size N from `distribution`
N=5
sample = distribution.getSample(N)
可用的发行版完整列表here
sample
具有OpenTURNS格式,但是您可以将其作为Numpy数组进行操作:
s = np.array(Sample)
print(s)
>>>array([[1.65299759],
[6.78405097],
[0.88528975],
[0.87900211],
[0.25031129]])
您也可以通过调用distribution.drawPDF()
自定义:
from openturns.viewer import View
graph = distribution.drawPDF()
title = str(distribution)[:100].split('\n')[0]
graph.setTitle(title)
View(graph, add_legend=False)