使用可变标准偏差创建具有限制的法线

时间:2015-10-20 22:50:35

标签: python numpy normal-distribution standard-deviation

所以我正在调查np.random.norm()函数,我理解mean和std。我要做的是选择两个数字作为限制,例如平均值为1.0,我希望数字保持在0.5和1.5之间。我知道正常情况下技术上都是无限的,所以我需要使用if语句来控制它。我真正想要的是以编程方式调整标准偏差,将10%以下的任何东西置于0.5以下,90%百分位置内的任何值均低于1.5(不一定是90,但我希望我能清楚地说明我的观点)。有人能指引我走向正确的方向吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

numpy数组有一个.clip()方法听起来像你想要的那样:

In [4]: np.random.normal(1,.5,20).clip(0.5, 1.5)
Out[4]:
array([ 1.5       ,  1.07224695,  1.13982969,  1.5       ,  0.5       ,
        1.11223533,  0.96127858,  1.5       ,  0.632036  ,  1.23016015,
        0.5       ,  1.22120972,  0.66288919,  0.83533509,  0.90682758,
        1.13052954,  1.30401167,  1.43251102,  0.60045975,  0.9030919 ])

如果您希望动态完成某个百分位,您可以存储数组并计算百分位数:

In [9]: a = np.random.normal(1,.5,20)

In [10]: np.percentile(a, (10, 90))
Out[10]: array([ 0.56384585,  1.68703272])

In [11]: a.clip(*np.percentile(a, (10,90)))
Out[11]:
array([ 1.25908523,  1.58094023,  1.28567188,  0.56384585,  0.74706497,
        1.31853202,  1.47917016,  1.68703272,  0.62015172,  1.18379091,
        1.2165656 ,  1.30725614,  0.64338962,  1.66354559,  0.5804302 ,
        1.68703272,  1.59532039,  0.56384585,  1.21919715,  1.65989337])