从概率分布中随机抽样一定次数

时间:2016-07-14 18:51:53

标签: python numpy math

我们说我有正态分布,我想从中抽样1000次,如果值在前20个百分点,我想在计数器上加1。什么是最佳解决方案?

我试图用numpy来解决这个问题,并且无法弄清楚它背后的数学。现在我有这个,但我觉得它可以用数学方法完成:

import numpy as np
s = np.random.normal(0, 1, 1000)
sum([val for val in s if val > np.percentile(s, 80)])

2 个答案:

答案 0 :(得分:1)

如果您的分发正常,我会假设您知道musigma,否则此问题需要一些额外的后期处理。对于您取出的每个元素,您都会有一定的Z=(X-mu)/sigma。你的第20个百分位是任何X Z>0.842。{/ p>

您可以执行以下操作:

if Z_val(x, mu, sigma) > 0.842: counter+=1

答案 1 :(得分:1)

这是生成的数组(您可以使用均值和标准偏差,它们是默认值):

mu = 0
std = 1
arr = np.random.normal(mu, std, 1000)

这将为您提供前20个百分位中的项目数:

arr[arr > np.percentile(arr, 80)].size
Out[30]: 200

编辑:你的代码也很好。但是你不想总结价值,你想要计算它们。因此,只要val > np.percentile(s, 80)你想要总结1:

sum([1 for val in s if val > np.percentile(s, 80)])
Out[35]: 200

这会比numpy的方法慢。