创建具有可变标准偏差限制的法线
Creating a normal with limits with variable standard deviation
所以我研究了 np.random.norm() 函数,我理解了 mean 和 std。我想要做的是选择两个数字作为限制,例如 1.0 的平均值,我希望数字保持在 0.5 和 1.5 之间。我知道法线在技术上会双向无穷大,所以我需要放置 if 语句来控制它。我真正想要的是以编程方式调整标准偏差,将任何低于 0.5 的值置于第 10 个百分位数中,将任何高于 1.5 的值置于第 90% 的百分位数中(不一定是 90,但我希望我的观点清楚)。有人可以在这里指导我正确的方向吗?
谢谢!
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])
所以我研究了 np.random.norm() 函数,我理解了 mean 和 std。我想要做的是选择两个数字作为限制,例如 1.0 的平均值,我希望数字保持在 0.5 和 1.5 之间。我知道法线在技术上会双向无穷大,所以我需要放置 if 语句来控制它。我真正想要的是以编程方式调整标准偏差,将任何低于 0.5 的值置于第 10 个百分位数中,将任何高于 1.5 的值置于第 90% 的百分位数中(不一定是 90,但我希望我的观点清楚)。有人可以在这里指导我正确的方向吗?
谢谢!
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])