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